MySQL LEFT JOIN 不能处理多个表
Posted
技术标签:
【中文标题】MySQL LEFT JOIN 不能处理多个表【英文标题】:MySQL LEFT JOIN not Working with multiple tables 【发布时间】:2013-07-09 12:48:07 【问题描述】:我知道网络上有很多相关的问题,而且, 第一个答案是 GOOGLE 它, 我不需要第一个答案,因此感谢每个人第二个答案。
我有 4 张桌子:
付款、发票项目、用户、项目
关系:
付款.InvoiceItem_Id InvoiceItem.InvoiceItemId
付款.User_Id 用户.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,我将获得 Payment 的所有记录,但我不知道为什么要更改它,因为第三个 INNER JOIN 在 InvoiceItem.Item_Id 之间Items.ItemsId 并且查询应该是对这些表的 INNER JOIN。
提前致谢。
【问题讨论】:
【参考方案1】:因为一旦您离开了 Invoice 的外部联接,对 Invoice 项目执行 Inner Join 需要所有 Invoice 项目都存在,从而有效地击败了您在 Invoice 上的左联接。
【讨论】:
以上是关于MySQL LEFT JOIN 不能处理多个表的主要内容,如果未能解决你的问题,请参考以下文章
mysql 优化慢复杂sql (多个left join 数量过大 order by 巨慢)
Mysql 连接(left join, right join, inner join ,full join)