MySQL LEFT JOIN 不适用于多个表

标签 mysql left-join

我知道网络上有很多相关问题,并且, 第一个答案是 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/

相关文章:

sql-server - 参数化存储过程条件连接,通过 3 个参数在连接表中搜索

mysql - Sql 连接按两个日期排序的两个表

mysql - 无法从 mysql 中的两个表中删除行

mysql - 带计时器和错误处理的 Node.js MySQL 连接

javascript - 使用 ajax 或 jquery 在 html 索引页面中加载 php 查询文件

java - JDBC 和并发问题

mysql - mysql中按频率和自定义表达式排序

mysql - 选择查询 Yii2 中的左连接 - 'single' 中的未知列 'on clause'

sql - 左连接和左外连接有什么区别?

MySQL分组查询优化