This SQL script not working though I don't see any issue in syntax or in join logic. Could someone tell me is thr something wrong in this 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.
Agenda: select non-matching POS records from POS_TRANSACTION using selection filter criteria given for POS_TRANSACTION. And I'm not looking for SUB query or Temp table queries.
Note: This SQL working without T1.TRANSACTION_ID IS NULL at the end or with T1.TRANSACTION_ID IS NOT NULL at the end
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. But since you're joining on TRANSACTION_ID, every N1 row must match itself, so is automatically excluded from this criterion.
Therefore, no POS_TRANSACTION can ever fulfil this criterion; and this query will always return no rows.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.