[英]SQL How to select columnA and columnB where columnB has a distinct value
我有一張叫emp的表
id| name
1 | jon
1 | trav
2 | jon
2 | jon
3 | jon
3 | jon
我想 select 僅在name列中具有值“jon”的不同id 。
我不希望id有一個值“jon”和另一個值作為name列中的其他值。
output 應如下所示:
id|name
2 |jon
3 |jon
您可以使用以下
邏輯是通過 id 找出名稱的總數和名稱的計數,其中 name='jon',如果匹配則返回 output。
這是執行此操作的一種方法。
-- 使用 max 因為我們在按 id 分組時需要一個聚合 function 來帶入任何其他列。
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 |
+----+-----------+
Db小提琴鏈接https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=637432cca3238285cb888889e1fa6ec7
NOT EXISTS 子句在這里可以很好地工作,並且表現也很好。
SELECT id, name
FROM tbl t
WHERE name = 'jon'
AND NOT EXISTS (SELECT 1 FROM tbl a WHERE a.id = t.id AND a.name != t.name)
SELECT id, name
FROM emp
WHERE name = 'jon'
GROUP BY id, name
HAVING COUNT(*) > 1
我會使用:
select id, min(name) as name
from emp
group by id
having min(name) = max(name) and min(name) = 'Jon';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.