MySQL LEFT JOIN无效

时间:2014-04-10 10:48:45

标签: mysql sql left-join

虽然我没有看到语法或连接逻辑中的任何问题,但此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

2 个答案:

答案 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可以满足此标准;并且此查询将始终不返回任何行。