简体   繁体   English

MySQL LEFTJOIN 不起作用

[英]MySQL LEFTJOIN not working

This SQL script not working though I don't see any issue in syntax or in join logic.尽管我在语法或连接逻辑中没有看到任何问题,但此 SQL 脚本不起作用。 Could someone tell me is thr something wrong in this SQL?有人能告诉我这个 SQL 有什么问题吗?

SELECT COUNT(1) FROM POS_TRANSACTION N1 
LEFT JOIN POS_TRANSACTION T1 ON N1.TRANSACTION_ID = T1.TRANSACTION_ID 
LEFT JOIN MASTER_TABLE1 T2 ON T1.CUSTOM_FIELD6 = T2.TXT_FIELD2 
WHERE T1.TRANSACTION_DATE > T2.DATE_FIELD1 AND T1.TRANSACTION_DATE < T2.DATE_FIELD2 
AND T1.TRANSACTION_DATE BETWEEN "2013-01-01" AND "2016-07-31" 
AND T2.TXT_FIELD2 IS NOT NULL AND T1.TRANSACTION_ID IS NULL

Here, POS_TRANSACTION have millions of POS data and MASTER_TABLE1 ..MASTER_TABLE-N tables(without Primary Keys in it) have master data used to filter pos data.在这里,POS_TRANSACTION 有数百万个 POS 数据,MASTER_TABLE1 ..MASTER_TABLE-N 表(其中没有主键)有用于过滤 pos 数据的主数据。

Agenda: select non-matching POS records from POS_TRANSACTION using selection filter criteria given for POS_TRANSACTION.议程:使用为 POS_TRANSACTION 给出的选择过滤条件从 POS_TRANSACTION 中选择不匹配的 POS 记录。 And I'm not looking for SUB query or Temp table queries.而且我不是在寻找 SUB 查询或临时表查询。

Note: This SQL working without T1.TRANSACTION_ID IS NULL at the end or with T1.TRANSACTION_ID IS NOT NULL at the end注意:此 SQL 在末尾没有 T1.TRANSACTION_ID IS NULL 或末尾有 T1.TRANSACTION_ID IS NOT NULL

Can you try this?你能试试这个吗?

SELECT COUNT(1) FROM POS_TRANSACTION N1 
LEFT JOIN POS_TRANSACTION T1 ON N1.TRANSACTION_ID = T1.TRANSACTION_ID 
LEFT JOIN MASTER_TABLE1 T2 ON T1.CUSTOM_FIELD6 = T2.TXT_FIELD2 
AND T1.TRANSACTION_DATE > T2.DATE_FIELD1 AND T1.TRANSACTION_DATE < T2.DATE_FIELD2 
AND T1.TRANSACTION_DATE BETWEEN "2013-01-01" AND "2016-07-31" 
AND T2.TXT_FIELD2 IS NOT NULL AND T1.TRANSACTION_ID IS NULL

By specifying T1.TRANSACTION_ID IS NULL when the join condition is N1.TRANSACTION_ID = T1.TRANSACTION_ID , you're effectively asking for all N1 rows that don't have a matching T1 row.通过在连接条件为N1.TRANSACTION_ID = T1.TRANSACTION_ID时指定T1.TRANSACTION_ID IS NULL ,您实际上是在要求所有没有匹配 T1 行的 N1 行。 But since you're joining on TRANSACTION_ID, every N1 row must match itself, so is automatically excluded from this criterion.但由于您加入 TRANSACTION_ID,每个 N1 行都必须与自身匹配,因此会自动从该条件中排除。

Therefore, no POS_TRANSACTION can ever fulfil this criterion;因此,没有 POS_TRANSACTION 能够满足这个标准; and this query will always return no rows.并且此查询将始终不返回任何行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM