MySQL错误1054未知列

时间:2015-12-27 13:54:34

标签: mysql mysql-workbench

我有2张桌子。

  1. t_problem
  2. t_riesenia
  3. 在t_problem中,我有主键id 在t_riesenia中,我有外键ProblemID。至少我想我有。
    我想从表t_problem中选择所有字段,t_riesenia中有一个解决方案(ProblemID中的t_riesenia等于id t_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

2 个答案:

答案 0 :(得分: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 :(得分: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子句,因为对于每个连接的记录,该比较都是正确的。)