2014-01-07 70 views
0

我有一個名爲「藝術家」與列的表 - idnamegenre組織在列類似的項目,從同一個表

我需要找出共享相同類型的所有藝術家。如果藝術家X有流派'搖滾'和'經典',藝術家Y有類型'經典'和'流行',藝術家Z有流派'流行',那麼樣品輸出如下:

first artist | second artist | genre 
X   | Y    | Classic 
Y   | Z    | Pop 
+0

你試過了什麼SQL?匆匆一瞥,它看起來不像你的模式真的會起作用。如果只有藝術家專欄和流派專欄,可能會更好 – ajtrichards

回答

0
  1. 使用流派
  2. 排除 「鏡重複」(XY-classic與YX-經典)和循環連接數據( ZZ-POP)使用S.id < J.id條件:

    Select S.Name as FirstArtist, 
    J.Name as SecondArtist, 
    S.Genre as CommonGenre 
    From Artist S 
    Inner Join Artist J 
    ON S.Genre = J.Genre and S.id < J.id 
    
+0

編輯:刪除重複 –

+0

你應該總是解釋你的答案,而不是隻給代碼 –

+0

完美!這正是我所需要的。 – user3168017

0

從您的示例輸出中判斷,您正在嘗試做兩件事。首先,訂購你的數據集,其次,「調整」它,以便數據中的某些列成爲行。

第一部分:

SELECT name, genre 
    FROM artist 
    ORDER BY genre 

第二部分是演示文稿。有很多方法可以做到這一點。例如,你可以試試這個。

SELECT GROUP_CONCAT(name ORDER BY name) AS names, 
     genre 
    FROM artist 
    GROUP BY genre 
    ORDER BY genre 

或者你可以在MySQL中查找各種技術來做pivoting。提示:他們都很困難。

或者,你可以在你的演示軟件中做到這一點。

+0

這很好。我是sql新手,你的解釋幫助我很好地理解了腳本。我將研究更多關於MySQL的支點。 – user3168017