在两列之间获取不常见的 ID
Fectch uncommon ID between two columns
我有两个 table,如果 table 中不存在任何一个 ID,我需要获取它 2. 我尝试了查询,但没有给出正确的结果。欢迎推荐。
TABLE 1
TABLE 2
输出应该是:因为发布 ID 和购买 ID 不在两列中。
QUERY 已尝试:
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,'')=''
您可以按如下方式使用NOT EXISTS
:
select * from t1
where not exists (select 1 from t2
where t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid)
您还可以使用LEFT JOIN
如下:
select t1.*
from t1 left join t2
on t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid
where t2.t2_id is null
一种方法是not exists
:
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);
我有两个 table,如果 table 中不存在任何一个 ID,我需要获取它 2. 我尝试了查询,但没有给出正确的结果。欢迎推荐。
TABLE 1
TABLE 2
输出应该是:因为发布 ID 和购买 ID 不在两列中。
QUERY 已尝试:
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,'')=''
您可以按如下方式使用NOT EXISTS
:
select * from t1
where not exists (select 1 from t2
where t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid)
您还可以使用LEFT JOIN
如下:
select t1.*
from t1 left join t2
on t1.releaseid =t2.releaseid or t1.purchaseid =t2.purchaseid
where t2.t2_id is null
一种方法是not exists
:
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);