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
任何想法如何做到這一點?
表看起來像這樣選擇一組列的一個以上的變化: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
任何想法如何做到這一點?
你可以組採用聚集:
select group
from t
group by group
having min(name) <> max(name);
可以使用join
,in
,或exists
獲得原始行:
select t.*
from t
where t.group in (select group
from t
group by group
having min(name) <> max(name)
);
注:group
是一列一個糟糕的名字因爲它是一個SQL關鍵字和一個MySQL保留字。
你可以用相關子查詢做到這一點:
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);
我同意。這是我爲這個問題編寫的一個專欄名稱。我沒有在真實的數據庫中使用這個名稱。 – user130893