我有一张这样的table:
name |id | state name1 12 4 name1 12 4 name2 33 3 name2 33 4 ...
我想从状态仅为4的表中选择每个名称和id,这意味着name1是正确的,因为它只有两个状态为4的记录,而没有更多的记录。同时name2是错误的,因为它有状态为4的记录和状态为3的记录。
sqougxex1#
select name, id from mytable where id not in (select distinct id from mytable where state <> 4)
bqujaahr2#
您可以这样使用“不存在”:
select distinct name, id from table1 a where not exists (select * from table1 b where a.id=b.id and state<>4)
8e2ybdfx3#
您可以使用聚合,如下所示:
SELECT name, id FROM your_table GROUP BY name, id HAVING SUM(state<>4)=0;
查看SQLFiddle的演示。
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
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)
5条答案
按热度按时间sqougxex1#
bqujaahr2#
您可以这样使用“不存在”:
8e2ybdfx3#
您可以使用聚合,如下所示:
查看SQLFiddle的演示。
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
jk9hmnmh5#
在更一般的情况下,可以使用count distinct(with not exists或with a join):