簡體   English   中英

SQL 如何 select columnA 和 columnB 其中 columnB 具有不同的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM