2016-12-16 28 views
0

表看起來像這樣選擇一組列的一個以上的變化:MySQL的另一列

id group name 
1 1  A 
2 1  A 
3 2  A 
4 2  B 
5 3  A 

我想與同組多個不同的名稱來選擇行。結果應該如下:

id group name 
3 2  A 
4 2  B 

任何想法如何做到這一點?

回答

0

你可以組採用聚集:

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

可以使用joinin,或exists獲得原始行:

select t.* 
from t 
where t.group in (select group 
        from t 
        group by group 
        having min(name) <> max(name) 
       ); 

注:group是一列一個糟糕的名字因爲它是一個SQL關鍵字和一個MySQL保留字。

+0

我同意。這是我爲這個問題編寫的一個專欄名稱。我沒有在真實的數據庫中使用這個名稱。 – user130893

0

你可以用相關子查詢做到這一點:

SELECT t1.id, t1.group, t1.name 
FROM mytable AS t1 
WHERE EXISTS (
    SELECT * FROM mytable t2 
    WHERE t2.group=t1.group AND t2.name <> t1.name 
); 

或者你也可以通過該組中的計數不同的名稱做:

SELECT t1.id, t1.group, t2.name 
FROM mytable AS t1 
INNER JOIN (
    SELECT t2.group FROM mytable AS t2 
    GROUP BY t2.group HAVING COUNT(DISTINCT t2.name) > 1 
) AS t2 USING (group);