Database 显示列值匹配的单个表中的数据

Database 显示列值匹配的单个表中的数据,database,join,match,self,Database,Join,Match,Self,我有一个名为“艺术家”的表格,其中有艺术家ID、艺术家姓名、艺术家流派等列 并且一直在试图找出如何列出他们拥有相同风格的艺术家 我想我可能需要一个自我加入,但不能完全达到那里。你能帮忙吗 Desired Output Artist Artist 2 Shared Genre A B Classic B C Pop 在SQL Server中,这会满足您的要求,但我认为这并不是您真正要求的 CREATE TABLE Artists(Artist

我有一个名为“艺术家”的表格,其中有艺术家ID、艺术家姓名、艺术家流派等列 并且一直在试图找出如何列出他们拥有相同风格的艺术家

我想我可能需要一个自我加入,但不能完全达到那里。你能帮忙吗

Desired Output
Artist Artist 2 Shared Genre 
A      B        Classic 
B      C        Pop 

在SQL Server中,这会满足您的要求,但我认为这并不是您真正要求的

CREATE TABLE Artists(Artist_ID INT, Artist_Name VARCHAR(100), Artist_Genre VARCHAR(20))

INSERT INTO Artists VALUES
(1,'A','Classic')
,(2,'B','Classic')
,(2,'B','Pop')
,(3,'C','Pop')

SELECT a.Artist_Name [Artist 1]
      ,b.Artist_Name [Artist 2]
      ,a.Artist_Genre [Shared Genre]          
  FROM Artists a
       INNER JOIN
       Artists b ON a.Artist_Genre = b.Artist_Genre
 WHERE a.Artist_ID < b.Artist_ID

什么类型的数据库(RDBMS)?如果有另一位艺术家,那么这三位艺术家共享一个流派呢?是否要在输出中包含艺术家3列?或者你真的更喜欢流派+艺术家的csv列表经典| a,B,D流行| B,CThanks Karl,是的,这就足够了,是的RDBMS。虽然正如你提到的,让所有的艺术家都在同一条线上,在风格匹配的地方,这是很理想的。如果我想要更多,我是否只需要指定c.Artist_Name[Artist 3]并继续,或者是否有更精确的方法让所有艺术家都在同一条线上?您可以添加更多的自连接以使他们在同一条线上,但这根本不能很好地扩展。相反,您可以使用MySQL中的group_concat生成流派和艺术家列表字段。这就是为什么我问什么类型的RDBMS,但我指的是哪一种,即sql server、mysql、access等。对不起,是sql server。Ohk非常感谢您的帮助。@user3517854我添加了一种在SQL Server中执行group+conact的方法。既然原件已经足够了,你也许应该继续写,把答案标记为已接受。
SELECT b.Artist_Genre,
       STUFF((SELECT ',' + CAST(Artist_Name AS VARCHAR(MAX))
                FROM Artists a
               WHERE a.Artist_Genre = b.Artist_Genre
               ORDER BY Artist_Name
                 FOR XML PATH('')),1,1,'') Artist_List
  FROM Artists b
 GROUP BY b.Artist_Genre