2015-12-27 191 views
0

我有2個表。MySQL錯誤1054未知列

  1. t_problem
  2. t_riesenia

在t_problem我有主鍵id
在t_riesenia我有外鍵ProblemID。至少我認爲我有。
我要選擇從表t_problem所有領域,其中有在t_riesenia的解決方案(有一個ProblemIDt_riesenia等於idt_problem

當試圖執行SQL語句:

SELECT * FROM `t_problem` where `t_problem`.`id`=`t_riesenia`.`ProblemID` 

我出現錯誤:

錯誤代碼:1054.'where子句'中的未知列't_riesenia.ProblemID'

爲什麼?查看下面的MySQL工作臺截圖。

t_problem t_problem

t_riesenia t_riesenia

t_riesenia外鍵
t_riesenia Foreign key

+1

你應該加入't_riesenia'表 – ikken

回答

3

你應該使用一個明確的join

SELECT p.* 
FROM t_problem p JOIN 
    t_riesenia r 
     ON p.id = r.ProblemID; 

它也有可能是你意圖的IN

SELECT p.* 
FROM t_problem p 
WHERE p.id IN (SELECT r.ProblemID FROM t_riesenia r); 

兩者之間的區別是重複如何在t_riesenia處理。第一個返回重複的行。第二個不是。

1

該列可能存在某處在您的數據庫,但它不存在在您的查詢。您查詢僅指定一個表:

SELECT * FROM `t_problem` where `t_problem`.`id`=`t_riesenia`.`ProblemID` 

注意FROM子句只有一個表。你可以多一點清楚地看到它,如果你明確構建它:

SELECT 
    * 
FROM 
    `t_problem` 
WHERE 
    `t_problem`.`id`=`t_riesenia`.`ProblemID` 

在此查詢的唯一已知表t_problem。爲了添加更多的表,他們需要被添加到FROM條款。像這樣的事情,例如:

SELECT 
    `t_problem`.* 
FROM 
    `t_problem` 
    INNER JOIN `t_riesenia` ON `t_problem`.`id` = `t_riesenia`.`ProblemID` 

(請注意,在這種情況下是不是真的需要WHERE條款,因爲這比較將成爲每一個真正加入記錄。)