【问题标题】:How to do an INNER JOIN query?如何进行 INNER JOIN 查询?
【发布时间】:2017-05-28 18:13:57
【问题描述】:

我有这个问题:

SELECT o.Date, 
  CONCAT (c.FirstName, '',  c.LastName), 
  c.StreetAddress, 
  c.Apt, 
  c.City, 
  c.State, 
  c.ZipCode, 
  c.HomePhone, 
  c.MobilePhone, 
  c.OtherPhone, 
  i.Quantity, 
  d.DonutName, 
  d.Description, 
  d.UnitPrice, 
  o.Notes,
FROM Customer AS c, 
  DonutOrder AS o, 
  OrderLineItem AS i, 
  Donut AS d
INNER JOIN DonutOrder AS o ON c.CustomerID = o.CustomerID
INNER JOIN Donut AS d ON o.DonutOrderID = i.DonutOrderID
INNER JOIN OrderLineItem AS i ON d.DonutID = i.DonutID 
;

我收到此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,在第 16 行的“FROM Customer AS c, DonutOrder AS o, OrderLineItem AS i, Donut AS d INN”附近使用正确的语法。

怎么了?

这是我的 SQL Fiddle 页面的链接:http://sqlfiddle.com/#!9/a2842/7

【问题讨论】:

    标签: sql join inner-join


    【解决方案1】:

    你有几个问题:

    • 错误与select 列表中的尾随逗号有关:最后一个字段不应后跟逗号
    • from 子句不应提及表两次,除非您打算这样做。但在这种情况下,您想使用inner join,而不是逗号分隔的列表。
    • 最后两个连接表的连接条件应该移动到另一个连接(交换)
    • select 列表中的第一个字段不存在。你可能打算o.OrderDate
    • 在您的小提琴中,OrderLineItem 表中没有数据,因此即使已更正,您的查询也不会返回任何行。

    这里是更正的版本:

    SELECT o.OrderDate, 
      CONCAT (c.FirstName, '',  c.LastName), 
      c.StreetAddress, 
      c.Apt, 
      c.City, 
      c.State, 
      c.ZipCode, 
      c.HomePhone, 
      c.MobilePhone, 
      c.OtherPhone, 
      i.Quantity, 
      d.DonutName, 
      d.Description, 
      d.UnitPrice, 
      o.Notes
    FROM Customer AS c
    INNER JOIN DonutOrder AS o ON c.CustomerID = o.CustomerID
    INNER JOIN OrderLineItem AS i ON o.DonutOrderID = i.DonutOrderID
    INNER JOIN Donut AS d ON d.DonutID = i.DonutID 
    ;
    

    http://sqlfiddle.com/#!9/a2842/15

    【讨论】:

    • 是的,我的意思是订购日期!感谢您注意到我的 Select 末尾的额外逗号。我什至没有想到我的 OrderLineItem 表中没有数据。那么在查询中就没有必要了吗?
    • 嗯,这取决于你想要的输出。正如您现在所拥有的,您需要OrderLineItem 表中的数据,因为您从中选择了数量。如果那里没有数据,这一切都取决于您要输出的内容。也许您想执行外部联接...由您决定。
    • 我删除了 OrderLineItem 及其所有语句,然后在我的 Select 语句中添加了 DonutID 和 DonutOrderID,现在我收到错误:'on Clause' 中的 Unknown column 'c.CustomerID'跨度>
    • 我只需要将数据添加到 3 个表中。
    • 那么回答这个问题:为什么会有第四张表,你需要在结果中显示一个数量吗?更重要的是,如果您没有订单行项目记录,则无法以任何方式将客户与甜甜圈相关联。在数据中检查自己......你怎么知道哪个客户买了哪个甜甜圈?
    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2015-01-10
    • 2020-09-19
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多