我试图将4个表与INNER JOIN链接在一起

时间:2014-04-02 05:45:40

标签: mysql sql inner-join on-clause

我的代码看起来像这样

CREATE TABLE Genre (
genreID INT NOT NULL DEFAULT 0,
genreName VARCHAR(20) NULL,
PRIMARY KEY (genreID));


CREATE TABLE Artists (
ArtistID INT NOT NULL DEFAULT 0,
name VARCHAR(45) NULL,
Genre_genreID INT NOT NULL,
PRIMARY KEY (ArtistID),
FOREIGN KEY (Genre_genreID)
REFERENCES Genre(genreID));



CREATE TABLE Albums (
albumsID INT NOT NULL DEFAULT 0,
name VARCHAR(45) NULL,
Artists_ArtistID INT NOT NULL,
PRIMARY KEY (albumsID),
FOREIGN KEY (Artists_ArtistID)
REFERENCES Artists(ArtistID));

CREATE TABLE Songs (
songID INT NOT NULL,
name VARCHAR(45) NULL,
length TIME NULL,
Albums_albumsID INT NOT NULL DEFAULT 0,
PRIMARY KEY (songID),
FOREIGN KEY (Albums_albumsID)
REFERENCES Albums (albumsID));

SELECT Artists.name, Genre.genreName, Songs.name
FROM Songs
INNER JOIN Genre ON Artists.ArtistID=Genre.genreID
INNER JOIN Artists ON Albums.Artists_ArtistID=Artists.ArtistID
INNER JOIN Albums ON Songs.Albums_albumID=Albums.albumsID;

试图让所有艺术家,流派和歌曲的名称匹配并显示。但我得到了

Unknown column 'Artists.ArtistID' in 'on clause'

我是SQL新手,对INNER JOINS来说,任何帮助和解释都会很棒!

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT Artists.name, Genre.genreName, Songs.name
FROM Songs
INNER JOIN Albums ON Songs.Albums_albumID=Albums.albumsID
INNER JOIN Artists ON Albums.Artists_ArtistID=Artists.ArtistID
INNER JOIN Genre ON Artists.ArtistID=Genre.genreID;

检查连接中表的顺序和出现次数

答案 1 :(得分:0)

你在第一行加入时提到了Songs表。但是你加入最后一行的ON函数表就像你的代码一样,你应该试试这个方法:

SELECT 
Artists.name, Genre.genreName, Songs.name
FROM Songs
INNER JOIN Albums 
ON Songs.Albums_albumID=Albums.albumsID
INNER JOIN Artists 
ON Albums.Artists_ArtistID=Artists.ArtistID
INNER JOIN Genre 
ON Artists.ArtistID=Genre.genreID;
相关问题