我有一個名爲「藝術家」與列的表 - id
,name
,genre
組織在列類似的項目,從同一個表
我需要找出共享相同類型的所有藝術家。如果藝術家X有流派'搖滾'和'經典',藝術家Y有類型'經典'和'流行',藝術家Z有流派'流行',那麼樣品輸出如下:
first artist | second artist | genre
X | Y | Classic
Y | Z | Pop
我有一個名爲「藝術家」與列的表 - id
,name
,genre
組織在列類似的項目,從同一個表
我需要找出共享相同類型的所有藝術家。如果藝術家X有流派'搖滾'和'經典',藝術家Y有類型'經典'和'流行',藝術家Z有流派'流行',那麼樣品輸出如下:
first artist | second artist | genre
X | Y | Classic
Y | Z | Pop
排除 「鏡重複」(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
從您的示例輸出中判斷,您正在嘗試做兩件事。首先,訂購你的數據集,其次,「調整」它,以便數據中的某些列成爲行。
第一部分:
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。提示:他們都很困難。
或者,你可以在你的演示軟件中做到這一點。
這很好。我是sql新手,你的解釋幫助我很好地理解了腳本。我將研究更多關於MySQL的支點。 – user3168017
你試過了什麼SQL?匆匆一瞥,它看起來不像你的模式真的會起作用。如果只有藝術家專欄和流派專欄,可能會更好 – ajtrichards