我需要在SQL表中找到某个组合不存在的所有行。例如,请考虑下表。
didTransition
在上表中,我需要返回ID2,因为没有(ID2,ABC)组合。我目前正在为表中的每个ID做一个WHILE和IF EXISTS,但是,有更有效的方法吗?这里的音量很大。
更新:以下所有答案似乎都会返回预期值。一种方法比其他方法有优势吗?
答案 0 :(得分:0)
如果您只需要ID2
,则可以使用group by
和having
:
select t2.column_1
from t
group by t2.column_1
having count(*) <> (select count(distinct t2.column_2) from t t2);
如果您确实想要缺少值,那么查询会有点复杂。
答案 1 :(得分:0)
可能是你需要一个不在和子选择
select distinct column_1
from my_table
where column_1 not in (select column_1 from my_table
where column_2 ='ABC');
答案 2 :(得分:0)
您可以使用以下查询:
with ids (v1) as
(select distinct v1 from Mytable),
vals (v2) as
(select distinct v2 from Mytable),
allCombs as
(select v1, v2 from ids, vals)
select * from allCombs c
where not exists (select * from myTable t where c.v1 = t.v1 and c.v2 = t.v2);
答案 3 :(得分:0)
如果你想要所有没有列表之一的所有column_1你可以在这样的一般情况下这样做。
-- first make the list
with items_2_find as
(
SELECT 'ABC' as V
UNION ALL
SELECT 'XYZ' as V
UNION ALL
SELECT 'QWE' as V
)
-- left join and find missing
SELECT items_2_find.V
FROM items_2_find
LEFT JOIN aTable ON items_2_find.V = aTable.Column_2
WHERE aTable.Column_1 is null