选择特定ID的行,其中与之对应的列仅提及一组值

时间:2018-11-30 21:37:16

标签: mysql sql oracle

我有一张桌子,如下:

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时,应该如何以优化的方式进行处理?

2 个答案:

答案 0 :(得分:2)

您可以使用group byhaving。一种简单的方法是:

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