我有一个名为“艺术家”与列的表 - 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