首页 > 解决方案 > 我需要使用链接表加入

问题描述

三张表如下:

CREATE TABLE Artist
(
    ArtistKey   char(20)    NOT NULL    PRIMARY KEY,
    ArtistName  varchar(50) NOT NULL
)

CREATE TABLE AlbumInfo
(
    AlbumInfoKey    char(20)    NOT NULL    PRIMARY KEY,
    AlbumTitle      varchar(50) NOT NULL,
    AlbumDate       date        NULL,
    AlbumStudio     varchar(50) NULL
)


CREATE TABLE AlbumArtist
(
    AlbumInfoKey char(20)   NOT NULL,
    ArtistKey    char(20)   NOT NULL,
PRIMARY KEY CLUSTERED
(
    AlbumInfoKey    ASC,
    ArtistKey       ASC
))

我的目标是列出所有艺术家及其专辑。我似乎什么也做不了。

我努力了:

SELECT
    Artist.ArtistName,
    AlbumInfo.AlbumTitle
FROM Artist
JOIN AlbumArtist 
   ON Artist.ArtistKey = AlbumArtist.ArtistKey
JOIN AlbumInfo 
   On AlbumInfo.AlbumInfoKey = AlbumArtist.AlbumInfoKey

然而,这没有给我任何回报,甚至没有错误。

标签: sqlsql-server

解决方案


好吧,我不得不重新做你的整个任务,我想出了更专业,更好的数据库管理方法。您需要删除这些表,然后重新执行整个操作,如下面的代码所示:

 --First create Artist table 
CREATE TABLE Artist
(
    Artist_key int  PRIMARY KEY IDENTITY(1,1),
    ArtistName  varchar(50) NOT NULL,
    
);

--Then create Album table
CREATE TABLE AlbumInfo
(
    Album_key int NOT NULL  PRIMARY KEY IDENTITY(1,1),
    AlbumTitle      varchar(50) NOT NULL,
    AlbumDate       date        NULL,
    AlbumStudio     varchar(50) NULL,
    Artist_key int FOREIGN KEY (Artist_key) REFERENCES Artist(Artist_key)
);




-- Must have Artist data before referencing in the album table
INSERT into Artist (ArtistName) values ('John')
INSERT into AlbumInfo (AlbumTitle,AlbumDate,AlbumStudio,Artist_key) values ('ABC3','2020-6-12','Def3',(select Artist_key from Artist where Artist_key = 1  ))


--test if data has been inserted
SELECT * FROM Artist
SELECT * FROM AlbumInfo

-- And finally this query will show the Artist with their relevant Albums
SELECT ArtistName,af.AlbumTitle,AlbumStudio from Artist a join AlbumInfo af on af.Artist_key = a.Artist_key

结果是:


推荐阅读