虽然我没有看到语法或连接逻辑中的任何问题,但此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
这里,POS_TRANSACTION有数百万个POS数据,MASTER_TABLE1 ..MASTER_TABLE-N表(没有主键)具有用于过滤pos数据的主数据。
议程:使用为POS_TRANSACTION提供的选择过滤条件,从POS_TRANSACTION中选择不匹配的POS记录。而且我不是在寻找SUB查询或临时表查询。
注意:这个没有T1.TRANSACTION_ID的SQL在结束时是NULL,或者在结尾处是T1.TRANSACTION_ID IS NOT NULL
答案 0 :(得分:0)
你能试试吗?
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
答案 1 :(得分:0)
通过在连接条件为T1.TRANSACTION_ID IS NULL
时指定N1.TRANSACTION_ID = T1.TRANSACTION_ID
,您实际上要求所有没有匹配T1行的N1行。但是,由于您正在加入TRANSACTION_ID,因此每个N1行必须与自身匹配,因此会自动从此条件中排除。
因此,没有POS_TRANSACTION可以满足此标准;并且此查询将始终不返回任何行。