我有一个表格SVS_TEMP,其中包含所有客户
ACCTID CUSTID PATH CUSTNAME
9080001380318 20800415729 /web/intsoft/DATA_MIGRATION.tif MAHAO JOHANE
9080001805335 10800101164 /web/intsoft/DATA_MIGRATION.tif LINDIWE RAQECHE
9080001380318 10800292271 /web/intsoft/DATA_MIGRATION.tif Mandate
9080002496026 10800387685 /web/intsoft/DATA_MIGRATION.tif MOEKETSI D. NTOI
9080003455730 10800618738 /web/intsoft/DATA_MIGRATION.tif Mandate
此表中没有主键
现在另一个表是signotherinfo,数据为
SIGNID ACCTID
1093418 9080001380318
1089652 9080001380318
1089711 9080001380318
1089910 9080001380318
1127222 9080001380318
1108463 9080001380318
其中signid是主键
我想从SVS_TEMP获取所有不在signotherinfo中的记录
答案 0 :(得分:2)
如果不了解您可能遇到的限制(您提到没有PK),我会说反加入是您最好的选择:
select *
from SVS_TEMP t
where not exists (
select null
from sigotherinfo o
where t.acctid = o.acctid
)
反连接的主要优点,如半连接(exists
),如果找到匹配,它就会停止查找"可以这么说。
答案 1 :(得分:1)
两个表的OUTER JOIN将按您的要求执行:
SELECT s.*
FROM SVS_TEMP t
LEFT OUTER JOIN SIGNOTHERINFO s
ON s.ACCTID = t.ACCTID
WHERE s.ACCTID IS NULL;
这就是"取SVS_TEMP中的所有行并将它们连接到SIGNOTHERINFO中与ACCTID字段匹配的行,即使SIGNOTHERINFO"中没有匹配的行,也保留SVS_TEMP中的所有行。然后WHERE子句表示"仅保留那些未找到SIGNOTHERINFO匹配数据的结果集行"。
祝你好运。