我有2张桌子。
在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工作台的屏幕截图。
答案 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
子句,因为对于每个连接的记录,该比较都是正确的。)