mysql:如何选择所有值都相同的行?

baubqpgj  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(408)

我有一张这样的table:

name |id | state
name1 12   4
name1 12   4
name2 33   3
name2 33   4
...

我想从状态仅为4的表中选择每个名称和id,这意味着name1是正确的,因为它只有两个状态为4的记录,而没有更多的记录。同时name2是错误的,因为它有状态为4的记录和状态为3的记录。

sqougxex

sqougxex1#

select name, id from mytable where id not in
(select distinct id from mytable where state <> 4)
bqujaahr

bqujaahr2#

您可以这样使用“不存在”:

select distinct name, id 
from table1 a
where not exists (select *
                  from table1 b
                  where  a.id=b.id and state<>4)
8e2ybdfx

8e2ybdfx3#

您可以使用聚合,如下所示:

SELECT name, id
FROM your_table
GROUP BY name, id
HAVING SUM(state<>4)=0;

查看SQLFiddle的演示。

7cjasjjr

7cjasjjr4#

您可能需要2个子查询。
选择按名称分组的状态4
按名称分组选择
比较计数如果计数相同,则选择它
示例:select name,count(名称)from table where state=4 as t1 select name,count(名称)from table as t2 select t1.name from t1和t2 where t2.count=t1.count

jk9hmnmh

jk9hmnmh5#

在更一般的情况下,可以使用count distinct(with not exists或with a join):

select distinct name, id 
from table1 a
where not exists (
select *
from table1 b
where  a.id=b.id
group by id
HAVING count(distinct state)>1)

相关问题