2014-01-07 33 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