需要双左连接的所有结果

Posted

技术标签:

【中文标题】需要双左连接的所有结果【英文标题】:Need all results from double left join 【发布时间】:2018-11-30 20:32:03 【问题描述】:

我有两张桌子。一个包含交易,包括书面支票和相应的 ReceiptID,另一个仅包含书面支票。然而,并不是所有的书面支票都在交易表中。我想加入两者并获得所有书面支票和 ReceiptID(仅在书面支票表中)。

表格 - 支票

字段 - LoanNo ChequeNo FieldA FieldB FieldC

表格 - 交易

字段 - LoanNo ReceiptID ChequeNo FiledZ FieldY

我在想一个

SELECT 
      .., 
      ReceiptID 
   FROM 
      Cheques 
         LEFT JOIN Transactions 
            ON Transactions.LoanNO =Cheques.LoanNo 
           AND Transactions.ChequeNo = Cheques.ChequeNo

应该可以,但是不行。至少不是我希望的方式。如果某张支票在 Checkes 表中但不在 Transactions 表中,则它不会显示在此查询中。我的期望是记录会显示,但没有相应的 ReceiptNo,这正是我想要的。

例子

检查表

╔════════╦══════════╦════════╗
║ LoanNo ║ ChequeNO ║ Amount ║
╠════════╬══════════╬════════╣
║   4444 ║    77777 ║     50 ║
║   5555 ║    99999 ║     60 ║
║   6666 ║   454545 ║    100 ║
╚════════╩══════════╩════════╝

交易表

+========+==========+========+===========+
| LoanNo | ChequeNO | Amount | ReceiptID |
+========+==========+========+===========+
|   4444 |    77777 |     50 | A5522     |
+--------+----------+--------+-----------+
|   5555 |    99999 |     60 | B6688     |
+--------+----------+--------+-----------+

加入的查询没有给出ChequeNo 454545的记录,我想要的加入是:

+========+==========+========+===========+
| LoanNo | ChequeNO | Amount | ReceiptID |
+========+==========+========+===========+
|   4444 |    77777 |     50 | A5522     |
+--------+----------+--------+-----------+
|   5555 |    99999 |     60 | B6688     |
+--------+----------+--------+-----------+
|   6666 |   454545 |    100 |           |
+--------+----------+--------+-----------+

【问题讨论】:

使用 Access 查询设计器并将 JOIN 修改为“包括来自 Checks 的所有记录以及仅来自匹配的 Transactions 的记录”。 LoanNo 可以不在支票中吗? 你没有清楚地解释你想要什么。请给minimal reproducible example。 PS 格式代码内联使用`backquotes` & 作为一个块通过缩进四个空格。考虑短表别名。 @philipxy,我想我确实解释了我想要什么。我希望查询为我提供“支票”表中的所有记录,包括“交易”表中的收据 ID。如果“交易”中没有对应的支票记录,则该结果字段应为空,但结果仍应给出“支票”表中的记录。 @user2588110 这个例子没有意义。 LoanNo 6666 来自哪里? Checks 表中的 ChequeNo 454545 在哪里? 【参考方案1】:

问题解决了。在非常确定我预期会发生的事情之后,我关闭了 MS Access 并重新启动了它。然后 SQL 按预期工作。不知道为什么它以前不起作用。

SELECT Cheques.*, Transactions.ReceiptID
FROM Cheques LEFT JOIN Transactions ON Transactions.ChequeNo = Cheques.ChequeNo AND Transactions.LoanNo = Cheques.LoanNo

【讨论】:

以上是关于需要双左连接的所有结果的主要内容,如果未能解决你的问题,请参考以下文章

YAML 中的 <<(双左箭头)语法是啥,它在哪里指定?

外连接查询

左连接不返回所有结果

左连接产生内连接结果 - PostgreSQL

在 2 个表中按所有字段搜索左连接 - 性能问题?

如何使用 group_concat 和左连接计算 mysql 查询的结果