【问题标题】:SQL Multiple JoinsSQL 多连接
【发布时间】:2015-04-04 06:20:21
【问题描述】:

我有4张表(如图),我要选择Invoice、开具发票的客户、开具发票的所有项目。

我不知道怎么做?我应该如何应用联接,还是应该使用子查询?

请帮帮我,我真的很震惊。

提前致谢。

【问题讨论】:

  • 你真的试过了吗?从使用 JOIN 开始,可能不需要子查询。
  • 找出匹配的主键和外键,你就可以很容易地编写连接了。
  • 你需要join,去做吧,如果你有问题在问题中写下你的查询
  • 永远不要将子查询作为首选。
  • 这样的查询几乎是自然语言。您希望选择客户和发票共享相同客户 ID 并且发票和项目在 invoiceItems 中具有匹配行的发票、客户和项目。

标签: sql sql-server


【解决方案1】:
Select c.ClientID, i.Invoiceid, it.itemId 
from Clients c
Inner Join Invoice i ON i.ClientId = c.ClientId
Inner Join InvoiceItems ii on ii.InvoiceId = i.InvoiceId
Inner Join Items it on ii.ItemId = it.ItemI
Order by c.Clientid, i.Invoiceid, it.itemId

可以根据需要添加其他列。

【讨论】:

    【解决方案2】:

    简单的INNER JOIN 应该可以工作

    SELECT I.ItemID,
           C.ClientID,
           IV.InvoiceID
    FROM   Items I
           INNER JOIN InvoiceItems II
                   ON I.ItemID = II.ItemID
           INNER JOIN Invoice IV
                   ON IV.InvoiceID = II.InvoiceID
           INNER JOIN Client C
                   ON C.ClientID = IV.ClientID 
    

    【讨论】:

      【解决方案3】:

      有什么问题?很简单的加入

      Select * From InvoiceItems ii
      Join Items i on ii.ItemID = i.ItemID
      Join Invoice inv on ii.InvoceID = inv.InvoiceID
      Join Clients c on inv.ClientID = c.ClientID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        • 2021-05-07
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多