【问题标题】:MySQL error 1054 unknown columnMySQL 错误 1054 未知列
【发布时间】:2016-04-01 13:39:42
【问题描述】:
我有 2 张桌子。
- t_problem
- t_riesenia
在 t_problem 我有主键 id。
在 t_riesenia 我有外键 ProblemID。至少我认为我有。
我想从表t_problem 中选择所有字段,其中t_riesenia 中有解决方案(t_riesenia 中的ProblemID 等于t_problem 中的id)
当试图执行 SQL 语句时:
SELECT * FROM `t_problem` where `t_problem`.`id`=`t_riesenia`.`ProblemID`
我得到一个错误:
错误代码:1054。“where 子句”中的未知列“t_riesenia.ProblemID”
为什么?请参阅下面 MySQL 工作台的屏幕截图。
t_problem
t_riesenia
t_riesenia 外键
【问题讨论】:
标签:
mysql
mysql-workbench
【解决方案1】:
您应该使用明确的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 中处理重复的方式。第一个返回重复的行。第二个没有。
【解决方案2】:
该列可能存在于您的数据库中的某个位置,但它不存在于您的查询中。你的查询只指定了一张表:
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 子句并不是真正需要的,因为对于每个连接的记录,该比较都是正确的。)