我知道网络上有很多相关问题,并且, 第一个答案是 GOOGLE 一下, 我不需要第一个答案,因此感谢每个人,第二个答案将不胜感激。
我有 4 张 table :
Payment, InvoiceItem , User, Items
关系:
Payment.InvoiceItem_Id <-> InvoiceItem.InvoiceItemId
Payment.User_Id <-> User.UserID
InvoiceItem.Item_Id <-> Items.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,我将拥有付款中的所有记录,但我不知道为什么应该更改它,因为第三个 INNER JOIN 位于 InvoiceItem.Item_Id <-> 之间Items.ItemsId 和查询应该是 INNER JOIN 这些到表。
提前致谢。
最佳答案
因为一旦您离开了发票的外部连接,对发票项目执行内部连接需要所有发票项目都存在,从而有效地击败了发票上的左连接。
关于MySQL LEFT JOIN 不适用于多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17548567/