表A(表B除外)(表示多个栏目)

时间:2012-10-31 15:01:58

标签: sql

我成功查询了这个:

SELECT * FROM tableA
WHERE NOT (column1 IN 
(SELECT column1 FROM tableB) AND columnDate='9999-12-31');

tableA有大约35000k(3500万)个记录,tableB有5k(5千)。 我会在不到5分钟的时间内检索tableAtableB以外的所有记录。

问题是当我尝试(使用相同记录卷的另一个示例)使用3列(键)获得相同的结果时:

SELECT * FROM tableA
WHERE NOT (column1 || column2 || column3 IN 
(SELECT column1 || column2 || column3 FROM tableB) AND columnDate='9999-12-31');

我在1小时40分钟内检索tableAtableB以外的所有记录....!

我可以更有效地查询吗?

2 个答案:

答案 0 :(得分:2)

SELECT * FROM tableA a
WHERE NOT EXISTS
(SELECT null FROM tableB where a.column1=column1 and a.column2=column2 and a.column3=column3)
AND columnDate<>'9999-12-31'

答案 1 :(得分:0)

一种方法是过滤左连接:

select  * 
from    tableA a
left join
        tableB b
on      b.col1 = a.col1
        and b.col2 = a.col2
        and b.col3 = a.col3
where   a.columnDate <> '9999-12-31'
        and b.id is null -- No match found in B