【问题标题】:What is wrong with my join in this query?我在此查询中的加入有什么问题?
【发布时间】:2013-08-26 04:35:23
【问题描述】:

我在这个网站http://www.sqlishard.com/Exercise练习基本的SQL

问题来了:

S5.0 - 内部联接

现在我们可以从单个表中提取数据并限定列 名字,让我们更进一步。 JOIN 语句允许我们 使用条件将多个表的行“连接”在一起以定义 它们如何相互匹配。从 FirstTable INNER 中选择 [列] 在 FirstTable.Id 上加入 SecondTable = SecondTable.FirstTableId

尝试使用 INNER JOIN 语法从 客户和订单表中的 CustomerId 列在 Orders 中 与客户中的 Id 列匹配。由于两个表都有一个 Id 列,您需要在 WHERE 子句中限定客户 ID 使用表名或表别名。

这是我的答案:

SELECT *
FROM Customers AS c
INNER JOIN Orders AS o ON c.ID = o.ID
WHERE o.CustomerID = c.ID

网站说我错了?谁能解释我哪里出错了?

编辑:我现在看到我不需要 WHERE 子句,但问题说明..

您需要将 WHERE 子句中的客户 ID 限定为 表名或表别名。

因此我感到困惑。还是谢谢。

【问题讨论】:

  • 您的WHERE 子句是多余的。加入的ON 部分就足够了
  • @KenKeenan - 再次检查,ON 子句不正确,WHERE 子句包含正确的谓词。
  • 怎么回事?根据问题,我需要在 WHERE 子句中限定客户 ID?
  • @MatBailie,正如问题所述,“由于两个表都有一个 Id 列”,我假设 ON c.ID = o.ID 没问题。但是这个问题的措辞非常糟糕,指的是不需要任何内容​​的WHERE 子句......
  • @DavidFolksman - 这个问题措辞不当。它试图回顾您在之前的问题中需要做的事情。

标签: sql


【解决方案1】:

试试这个方法:

SELECT c.ID,o.ID
FROM Customers AS c
INNER JOIN Orders AS o ON o.CustomerID = c.ID

或使用where子句

SELECT *
FROM Customers AS c, Orders AS o
where o.CustomerID = c.ID

【讨论】:

  • 我只是感到困惑,因为问题指出我需要限定 WHERE 子句中的表名
  • @Dijkgraaf,订单 ID 和客户 ID 不是一回事。你没有把他们加在一起。
  • 就像一个附加的问题:当您可以在 FROM 子句中指定两个表时,需要连接什么?
  • @DavidFolksman - 第二个查询中的语法被ANSI-92 标准(如 1992 年) 中的第一个查询中的语法所取代。它更明确、可维护,更适合更复杂的查询。不要花时间学习 SELECT * FROM Table1, Table2, Table3 WHERE ... 符号,除非您正在研究近期历史。
【解决方案2】:

如果使用JOIN..ON,则不需要where子句

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2015-07-31
    • 2010-12-23
    • 2010-11-26
    • 2017-02-25
    相关资源
    最近更新 更多