Mysql 为特定ID选择行,其中对应的列只提到了一组值
我的表格如下:Mysql 为特定ID选择行,其中对应的列只提到了一组值,mysql,sql,oracle,Mysql,Sql,Oracle,我的表格如下: ID | Value | Other Columns...........| ....... ----------------------------------------------- ID1 | Value1 | ....................... | ....... ID1 | Value2 | ....................... | ....... ID2 | Value3 | ....................... | ......
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种类型的值:Value1到Value5。
我需要写一个查询,在那里我应该得到所有的ID,其中的值是唯一的
值4和值5。示例:ID3和ID4。
由于我是SQL新手,我应该如何以优化的方式进行操作?您可以使用
groupby
和have
。一个简单的方法是:
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;
条件是计算给定
id
的值是每个值的多少倍。>0
表示至少有一行具有该值。=0
表示具有id
的行都没有该值。您可以使用分组依据
和拥有
。一个简单的方法是:
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;
条件是计算给定id
的值是每个值的多少倍。>0
表示至少有一行具有该值。=0
表示没有id为的行具有该值。我只是给您一个查询的大致概念
Select * from table where value is value or value 4
我只是给你一个粗略的想法
Select * from table where value is value or value 4
工作起来很有魅力+1如果你解释得更详细一点的话,会更有帮助:sum(当value='value4',然后1 else 0 end)>0和sum(当value='value5',然后1 else 0 end)>0和sum(当value不在('value4','value5'),然后1 else 0 end)=0;工作起来很有魅力+1如果你解释得更详细一点的话,会更有帮助:sum(当value='value4',然后1 else 0 end)>0和sum(当value='value5',然后1 else 0 end)>0和sum(当value不在('value4','value5'),然后1 else 0 end)=0;