在做家庭作业时遇到困难。自连接也是从连接表rec_artist中提取的.这是我正在运行的代码,并返回一个空集。为什么我要归还一套空的?
SELECT
a1.name,
a2.name,
ra.rec_id
FROM
artists a1, artists a2, rec_artist ra1, rec_artist ra2, rec_artist ra
WHERE
ra1.rec_id = ra2.rec_id
AND
ra1.artist_id = a1.id
AND
ra2.artist_id = a2.id
AND
ra1.artist_id > ra2.artist_id;表模式:
recordings
rec_title (varchar)
rec_id (Primary Key)
sales (dec)
genre_id (Foreign Key)
genres
id (primary key)
name (varchar)
artists
id (primary key)
name (varchar)
rec_artist (junction table)
artist_id (primary key)
rec_id (primary key)问题是:
列出至少有一个共同记录的艺术家对。
您的结果集必须有3列:艺术家的名字和他们共同的recording_id (只使用一条语句)。
只应显示唯一的对。
不会把艺术家和他/她自己配对。
发布于 2018-11-14 22:59:19
此查询不应返回空结果。它实际上应该会返回一个巨大的结果。您正确地找到了具有共同记录的艺术家对,但每对都将与rec_artists表中的每个rec_artists复制,因为在WHERE子句中对rec_artists ra表没有任何条件。
您不需要第三次加入rec_artists。您可以简单地从自联接中的任何一个rec_id表中选择rec_artists列;使用哪一种并不重要,因为ra1.rec_id = ra2.rec_id。
正确的查询是:
SELECT a1.name, a2.name, ra1.rec_id
FROM artists a1, artists a2, rec_artist ra1, rec_artist ra2
WHERE ra1.rec_id = ra2.rec_id
AND ra1.artist_id = a1.id
AND ra2.artist_id = a2.id
AND ra1.artist_id > ra2.artist_id;或者使用ANSI连接语法:
SELECT a1.name, a2.name, ra1.rec_id
FROM rec_artist AS ra1
JOIN rec_artist AS ra2 ON ra1.rec_id = ra2.rec_id AND ra1.artist_id > ra2.artist_id
JOIN artists AS a1 ON ra1.artist_id = a1.id
JOIN artists AS a2 ON ra2.artist_id = a2.idhttps://stackoverflow.com/questions/53309778
复制相似问题