MySQL 错误 1054 未知列
MySQL error 1054 unknown column
我有 2 个 tables。
- t_problem
- t_riesenia
在t_problem中我有主键id
。
在 t_riesenia 中我有外键 ProblemID
。至少我觉得我有。
我想 select 来自 table t_problem
的所有字段,其中 t_riesenia
中有一个解决方案(t_riesenia
中有一个 ProblemID
等于 id
在 t_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
子句,因为该比较对于每个连接的记录都是正确的。)
我有 2 个 tables。
- t_problem
- t_riesenia
在t_problem中我有主键id
。
在 t_riesenia 中我有外键 ProblemID
。至少我觉得我有。
我想 select 来自 table t_problem
的所有字段,其中 t_riesenia
中有一个解决方案(t_riesenia
中有一个 ProblemID
等于 id
在 t_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
子句,因为该比较对于每个连接的记录都是正确的。)