create table t(id int, name varchar(50))
insert into t
select 1,'jon' union all
select 1,'trav' union all
select 2,'jon' union all
select 2,'jon' union all
select 3,'jon' union all
select 3,'jon'
select id,max(name)
from t
group by id
having count(distinct name)=count(distinct case when name='jon' then 1 end)
+----+-----------+
| id | max(name) |
+----+-----------+
| 2 | jon |
| 3 | jon |
+----+-----------+
4条答案
按热度按时间fzwojiic1#
您可以使用以下方法
逻辑是找出名称总数和名称计数(按id,其中name='jon',如果匹配,则返回输出)。
这里有一种方法。
--使用max,因为我们在按id分组时需要一个聚合函数,以便将任何其他列带入。
db小提琴链接https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=637432cca3238285cb888889e1fa6ec7
kokeuurv2#
nwo49xxi3#
notexists子句在这里会很好地工作,而且也会很好地执行。
8fsztsew4#
我会用: