0

我知道网络上有很多相关的问题,第一个答案是 GOOGLE 它,我不需要第一个答案,所以感谢每个人,第二个答案将不胜感激。

我有 4 张桌子:

付款、发票项目、用户、项目

关系:

付款.InvoiceItem_Id <-> InvoiceItem .InvoiceItemId

付款.User_Id <->用户.UserID

InvoiceItem .Item_Id <->项目.ItemsId

Payment.InvoiceItem_Id是 NULLABLE 所以我有没有 InvoiceItems 的付款

查询是:

 
    SELECT 
        Payment.Id,
        Payment.User_Id,
        Payment.InvoiceItem_Id,
        User.Name,
        Items.Name
    FROM
        Payment
            LEFT OUTER JOIN
        InvoiceItem ON Payment.InvoiceItem_Id = InvoiceItem.InvoiceItemId
            INNER JOIN
        User ON Payment.User_Id = User.UserID
            INNER JOIN
        Items ON InvoiceItem.Items_Id = Items.ItemsId
    WHERE Payment.User_Id = 724;

如果我将第三个 INNER JOIN 更改为 LEFT OUTER 我将获得 Payment 的所有记录,但我不知道为什么要更改它,因为第三个 INNER JOIN 在InvoiceItem .Item_Id <-> Items .ItemsId 之间,并且查询应该是 INNER JOIN on这些到表。

提前致谢。

4

1 回答 1

0

因为一旦你离开了 Invoice 的外部连接,对 Invoice Items 执行 Inner Join 需要所有 Invoice Items 都存在,从而有效地击败了 Invoice 上的左连接。

于 2013-07-09T12:51:14.540 回答