【问题标题】:MySQL error 1054 unknown columnMySQL 错误 1054 未知列
【发布时间】:2016-04-01 13:39:42
【问题描述】:

我有 2 张桌子。

  1. t_problem
  2. 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 外键

【问题讨论】:

  • 你应该加入t_riesenia table

标签: 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 子句并不是真正需要的,因为对于每个连接的记录,该比较都是正确的。)

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2021-05-27
      • 2017-03-17
      • 2013-10-13
      • 1970-01-01
      相关资源
      最近更新 更多