Sql 两列之间存在不常见的ID
我有两个表,如果表2中没有任何一个ID,我需要获取。我尝试了这个查询,但没有给出正确的结果。请建议 表1 表2 输出应为:,因为这两列中都没有发布ID和购买ID 已尝试查询:Sql 两列之间存在不常见的ID,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有两个表,如果表2中没有任何一个ID,我需要获取。我尝试了这个查询,但没有给出正确的结果。请建议 表1 表2 输出应为:,因为这两列中都没有发布ID和购买ID 已尝试查询: SELECT T1_ID FROM T1 LEFT OUTER JOIN T2 ON t1.RELEASEID=t2.RELEASEID LEFT OUTER JOIN T2 t3 ON t1.PURCHASEID=t3.PURCHASEID WHERE IFNULL(T2.RELEASEID,'') ='' OR
SELECT T1_ID
FROM T1 LEFT OUTER JOIN T2
ON t1.RELEASEID=t2.RELEASEID
LEFT OUTER JOIN T2 t3
ON t1.PURCHASEID=t3.PURCHASEID
WHERE IFNULL(T2.RELEASEID,'') ='' OR IFNULL(T3.PURCHASEID,'')=''
您可以使用
不存在
,如下所示:
select * from t1
where not exists (select 1 from t2
where t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid)
select t1.*
from t1 left join t2
on t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid
where t2.t2_id is null
您还可以使用左连接
,如下所示:
select * from t1
where not exists (select 1 from t2
where t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid)
select t1.*
from t1 left join t2
on t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid
where t2.t2_id is null
一种方法是
不存在
:
select t1.*
from t1
where not exists (select 1
from t2
where t2.releaseid = t1.releaseid
) and
not exists (select 1
from t2
where t2.purchaseid = t1.purchaseid
);
无论?
是真正的字符串还是应该表示NULL
,这都应该有效
注意:这可以利用t2(releaseid)
和t2(purchaseid)
上的索引,这可以大大提高较大数据的性能。我想您需要:
select t1.*
from table1 t1
where
(t1.release_id = '?' and t2.purchase_id = '?')
or not exists (
select 1
from table2 t2
where t1.release_id in ('?', t2.release_id)
and t1.purchase_id in ('?', t2.purchase_id)
)
如果问号应该表示
null
值,您可以将='?'
的所有实例替换为is null
,请尝试此操作,并告诉我它是否有效
SELECT * FROM TABLE1 WHERE NOT EXISTS (SELECT '1' FROM TABLE2 WHERE TABLE1 .RELEASEID=TABLE2.RELEASEID OR TABLE1 .PURCHASEID=TABLE2.PURCHASEID);