MySQL 错误 1054 未知列

MySQL error 1054 unknown column

我有 2 个 tables。

  1. t_problem
  2. t_riesenia

在t_problem中我有主键id
在 t_riesenia 中我有外键 ProblemID。至少我觉得我有。
我想 select 来自 table t_problem 的所有字段,其中 t_riesenia 中有一个解决方案(t_riesenia 中有一个 ProblemID 等于 idt_problem)

尝试执行 SQL 语句时:

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

我收到一个错误:

Error Code: 1054. Unknown column 't_riesenia.ProblemID' in 'where clause'

为什么?请参阅下面 MySQL workbench 的屏幕截图。

t_problem

t_riesenia

t_riesenia 外键

您应该使用显式 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 中处理重复项的方式。前 returns 行重复。第二个没有。

该列可能存在于您的数据库中的某处,但它不存在于您的查询中。您的查询只指定了一个 table:

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

请注意 FROM 子句只有一个 table。如果你明确地构造它,你可以更清楚地看到它:

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

此查询中唯一已知的 table 是 t_problem。为了添加更多的 table,需要将它们添加到 FROM 子句中。像这样的东西,例如:

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

(请注意,在这种情况下,实际上不需要 WHERE 子句,因为该比较对于每个连接的记录都是正确的。)