2017-08-05 96 views
1
+------+------+ 
| ColA | ColB | 
+------+------+ 
| dog | 74 | 
| dog | 74 | 
| dog | 74 | 
| cat | 55 | 
| cat | 55 | 
| cat | 55 | 
| bird | 44 | 
| bird | 43 | 
| bird | 44 | 
+------+------+ 

在上表中。查找不相等的關聯值

  • 所有的值(74)都是相同的,並且與「狗」相關聯。
  • 這同樣適用於「貓」,所有值(55)都相同,並與「貓」相關聯。
  • 然而,對於「鳥」,請注意並非所有的值都是相同的,因爲有44和43關聯到「鳥」。

那麼如何寫出我的SQL查詢來返回所有的動物,它們的關聯值並不完全相同,在這種情況下這將是「鳥」。

預先感謝您

回答

1

你可以做GROUP BY兩次,過濾HAVING子句中:

SELECT g.ColA 
FROM (
    SELECT a.ColA, a.ColB 
    FROM Animals a 
    GROUP BY a.ColA, a.ColB 
) g 
GROUP BY g.ColA 
HAVING COUNT(*) > 1 

GROUP BY會產生一行爲每個不同的{ColA;ColB}對;外部GROUP BYHAVING將拒絕ColA s與一個關聯ColB

0

我會GROUP BYHAVING做到這一點,但沒有查詢是必要的:

select colA 
from t 
group by colA 
having min(colB) <> max(colB); 

這只是返回colA值,它們的最小和最大colB值是不同的。

0
select colA 
from t 
group by colA 
having count(distinct colB) <> 1; 

與戈登相似,但可能更明顯的目的是什麼。