Database 显示列值匹配的单个表中的数据
我有一个名为“艺术家”的表格,其中有艺术家ID、艺术家姓名、艺术家流派等列 并且一直在试图找出如何列出他们拥有相同风格的艺术家 我想我可能需要一个自我加入,但不能完全达到那里。你能帮忙吗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
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