Sql 两列之间存在不常见的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

我有两个表,如果表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 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);