【问题标题】:where clause is ambiguouswhere 子句不明确
【发布时间】:2013-11-07 12:52:46
【问题描述】:

当我尝试从多个表中选择数据时遇到问题,我想知道是否有人可以帮助我。这些表是链接的,我试图只选择具有特定 ID 的东西。我在 1 个表的查询中取得了成功,但是在 2 个表中它以我的方式踢了一个错误:

从配方中获取数据的查询失败:where 子句中的列 Recipe_ID 不明确。

这是我的查询:

$query="SELECT * FROM Recipe, Ingredients_Needed WHERE Recipe_ID ='$chosen_id'";

【问题讨论】:

  • 题外话,但请确保您的$chose_id 变量已正确转义,否则您将容易受到 SQL 注入攻击。

标签: mysql sql


【解决方案1】:

Recipe_ID 是否同时出现在 Recipe 和 Ingredients_Needed 中? 如果确实如此,那么您需要执行以下操作:

SELECT * FROM Recipe, Ingredients_Needed WHERE Recipe.Recipe_ID = ....

附带说明,使用正确的连接语法而不是隐式连接,即:

SELECT r.*, n.*
FROM Recipe r 
INNER JOIN Ingredients_Needed n ON n.Recipe_ID = r.Recipe_ID
WHERE r.Recipe_ID = ...

这会更清楚,特别是如果您要加入具有不同条件等的多个表,因为您可以通过查看查询而不是猜测来快速查看别名表。

【讨论】:

  • 我也建议进行此更改:SELECT Recipe.*, Ingredients_Needed.*
【解决方案2】:

指定表格:

WHERE table.Recipe_ID=

【讨论】:

    【解决方案3】:

    指定receipe_id 引用哪个表:Recipe and/or Ingredients_Needed

    SELECT * FROM Recipe r, Ingredients_Needed i WHERE r.Recipe_ID = x and r.Recipe_ID = x
    

    【讨论】:

      【解决方案4】:

      只需使用别名命名您的表并指定关系。您可能在两个表中具有相同的列名,或者在表 Ingredients_Needed 列中 Recipe_ID 有多个相同的条目。所以你的 SQL 将是:

      SELECT * FROM Recipe R 
      LEFT JOIN Ingredients_Needed I on R.ID=I.Recipe_ID 
      WHERE R.ID = '$choden_id'
      

      如果您在表中Recipe 没有ID 但有Recipe_ID,只需将R.ID 更改为R.Recipe_ID

      【讨论】:

      • 使用此 SQL,您可以在没有 Ingredients_Needed 的情况下获得 Recipies。如果你只使用 INNER JOIN 你只会得到行,其中存在 Ingredients_Needed
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2011-06-11
      • 2019-10-09
      • 2014-05-03
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多