获取一个表中存在的记录,但基于多个条件不存在于其他表中

时间:2016-12-26 05:36:14

标签: sql

有两个表

A(UCID,Create_Date,Av_ID,Phone_No)

B(UCID,Create_Date,Av_ID,Phone_No)

我需要首先根据UCID获取A中但不存在于B中的记录,之后可能在B中没有捕获UCID(在这种情况下UCID将为null) 所以根据三列的其余部分(Create_Date,Av_ID,Phone_No)获取A中不存在于B中的记录。

我做得太多了

SELECT A.* INTO #TEMP FROM A LEFT JOIN B WHERE B.UCID IS NULL
SELECT A.* FROM #temp JOIN B on A.CREATE_DATE= B.CREATE_DATE WHERE A.PHONE_NO=B.PHONE_NO AND A.AV_ID=B.AV_ID

由于存在大量记录,因此需要大约8分钟才能执行,所以如果有任何方法可以使用单个连接或不使用临时表来做同样的事情。请帮助

1 个答案:

答案 0 :(得分:1)

单一查询

SELECT A.* 
FROM A 
    LEFT JOIN B on (A.UCID = B.UCID) or 
        (B.UCID IS NULL AND A.CREATE_DATE= B.CREATE_DATE AND A.PHONE_NO=B.PHONE_NO AND A.AV_ID=B.AV_ID)
WHERE B.UCID IS NULL