我有一张桌子,如下:
ID | Value | Other Columns...........| .......
-----------------------------------------------
ID1 | Value1 | ....................... | .......
ID1 | Value2 | ....................... | .......
ID2 | Value3 | ....................... | .......
ID3 | Value4 | ....................... | .......
ID3 | Value4 | ....................... | .......
ID3 | Value5 | ....................... | .......
ID4 | Value4 | ....................... | .......
ID4 | Value5 | ....................... | .......
ID5 | Value2 | ....................... | .......
ID5 | Value4 | ....................... | .......
ID5 | Value5 | ....................... | .......
“值”列可以具有5种类型的值:“值1”到“值5”。 我需要编写一个查询,在其中我应该获取所有ID(仅值) Value4 和 Value5 。例如: ID3 和 ID4 。 当我刚接触SQL时,应该如何以优化的方式进行处理?
答案 0 :(得分:2)
您可以使用group by
和having
。一种简单的方法是:
select id
from t
group by id
having sum(case when value = 'value4' then 1 else 0 end) > 0 and
sum(case when value = 'value5' then 1 else 0 end) > 0 and
sum(case when value not in ('value4', 'value5') then 1 else 0 end) = 0;
条件计算value
是给定id
的每个值有多少次。 > 0
表示至少有一行具有该值。 = 0
说没有id
的行有该值。
答案 1 :(得分:0)
我只是给您一个关于查询的大致概念。
Select * from table where value is value or value 4