根據Oracle documentation,自然連接用於基於所有匹配的列名稱連接2個表。
因此,查詢中的問題是您無法指定您應該加入的特定列,因爲自然連接會基於所有匹配的列名稱進行連接。
所以在你的情況下,如果你想基於ArtistID加入,並假設這兩個表沒有任何其他匹配的列,請在Phil的評論中提及以下內容。
SELECT Genre, ROUND(AVG(NumberofStreams)) AS "Average Number of Streams"
FROM
(SELECT Artist.Genre, Songs.NumberofStreams, Songs.SongID
FROM Songs
NATURAL JOIN
Artist
)
GROUP BY Genre;
,或者,如果有多個匹配列,但是你想加入僅僅基於ArtistID
,您可以使用USING
條款與INNER JOIN
SELECT Genre, ROUND(AVG(NumberofStreams)) AS "Average Number of Streams"
FROM
(SELECT Artist.Genre, Songs.NumberofStreams, Songs.SongID
FROM Songs
INNER JOIN
Artist
USING (ArtistID)
)
GROUP BY Genre;
但是爲了避免混淆,最好是使用INNER JOIN
與ON
子句,您可以從查詢中看到哪些列正在聯接。它也可以在加入不同名稱的列時使用。
SELECT Genre, ROUND(AVG(NumberofStreams)) AS "Average Number of Streams"
FROM
(SELECT Artist.Genre, Songs.NumberofStreams, Songs.SongID
FROM Songs
INNER JOIN
Artist
ON Songs.ArtistID = Artist.ArtistID
)
GROUP BY Genre;
當它是一個NATURAL JOIN時,是否包含'ON'子句或JOIN?也就是說,它應該是'NATURAL JOIN Artist')? –