2015-10-22 27 views
0

也許我錯過了一些邏輯或方法來輕鬆地做到這一點。GROUP_CONCAT自我排斥

有顏色的表格,一些可具有在相同colorHue

id colorName colorHue ColorNumber 
---------------------------------------------------- 
1 Orange  Og   1000 
2 Pumpkin  Og   1000 
3 Red   Rd   1001 
4 Brick  Rd   1001 
5 Carrot  Og   1000 
6 Blue  Blue  1002 
7 Scarlet  Rd   1001 

0,1,2,3種或更多個匹配其他顏色我需要與所有列出的顏色和其他可能的一個VIEW沒有顯示當前行的顏色名稱。

id colorName Other Colors 
---------------------------------------------------- 
1 Orange  Pumpkin,Carrot 
2 Pumpkin  Orange,Carrot 
3 Red   Brick,Scarlet 
4 Brick  Red,Scarlet 
5 Carrot  Orange,Pumpkin 
6 Blue   
7 Scarlet  Red,Brick 

我可以很容易地得到所有他們的GROUP_CONCAT但無法弄清楚如何消除自參照當前行。所以,我得到這個:

id colorName Other Colors 
---------------------------------------------------- 
1 Orange  Orange,Pumpkin,Carrot 
2 Pumpkin  Orange,Pumpkin,Carrot 
3 Red   Red,Brick,Scarlet 
4 Brick  Red,Brick,Scarlet 
5 Carrot  Orange,Pumpkin,Carrot 
6 Blue  Blue 
7 Scarlet  Red,Brick,Scarlet 
+0

什麼是您查詢 –

+0

那麼什麼情況下是從第1行列表中排除'Orange'? – Alex

+0

哦!我看,我想我已經得到了你的目標 – Alex

回答

3

http://sqlfiddle.com/#!9/43c122/2

SELECT colorHue, 
     GROUP_CONCAT(IF(colorHue=colorName,null,colorName)) 
FROM colors 
GROUP BY colorHue 

UPDATEhttp://sqlfiddle.com/#!9/43c122/8

SELECT c.*, 
     GROUP_CONCAT(c1.colorName) 
FROM colors c 
LEFT JOIN colors c1 
ON c.colorHue = c1.colorHue 
    AND c.id != c1.id 
GROUP BY c.id 
+0

感謝您的快速回答,但是這並不會輸出列表。另外,如果colorHue不是顏色的名稱而是縮寫? Org,Rd,B,Gr等 – Tom

+0

*你是什麼意思,但不輸出清單*?你看過小提琴嗎? – Alex

+0

是的,我做到了。我想我所需要的簡單解釋太簡單了。將colorHue值更改爲橙色的O,紅色的R和藍色的B,看看會發生什麼。我需要上面表2所示的輸出。每種顏色都有替代品,但不是實際的顏色。 – Tom