Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为特定ID选择行,其中对应的列只提到了一组值_Mysql_Sql_Oracle - Fatal编程技术网

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。示例:ID3ID4
由于我是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;