查找组合不存在的行SQL

时间:2016-10-31 20:03:47

标签: sql sql-server

我需要在SQL表中找到某个组合不存在的所有行。例如,请考虑下表。

didTransition

在上表中,我需要返回ID2,因为没有(ID2,ABC)组合。我目前正在为表中的每个ID做一个WHILE和IF EXISTS,但是,有更有效的方法吗?这里的音量很大。

更新:以下所有答案似乎都会返回预期值。一种方法比其他方法有优势吗?

4 个答案:

答案 0 :(得分:0)

如果您只需要ID2,则可以使用group byhaving

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