phpmyadmin 尝试在sql中输出由两位艺术家创作的歌曲

yrefmtwq  于 2022-11-23  发布在  PHP
关注(0)|答案(1)|浏览(169)

我想在我有两个艺术家的地方得到歌曲id。这是表的样子
| 歌曲ID|艺术家ID|
| - -|- -|
| 2000年。|五千|
| 2001年的报告。|小行星5001|
| 2002年的报告。|五千|
| 2002年的报告。|小行星5001|
这是目前为止我的代码

SELECT SONG_ID 
FROM SONG_ARTIST
WHERE ARTIST_ID = '5000' and '5001'

这给了我两首歌,当我只想要一个输出,这是2002年,但它给了我2001年和2002年作为输出。我知道它的东西做在哪里子句,但不能弄清楚。

lskq00tm

lskq00tm1#

你说得对-问题出在where子句上。
当前代码:

SELECT SONG_ID 
FROM SONG_ARTIST 
WHERE   ARTIST_ID = '5000' 
    and '5001'

您永远不要指定'5001'(例如ARTIST_ID = '5001',而不仅仅是'5001';但是这并不能解决问题,每行数据只能有一个ARTIST_ID;例如,第一行具有
| 歌曲标识|艺术家标识|
| - -|- -|
| 二○ ○ ○年|五千|
它只有一个ARIST_ID。如果where子句是ARTIST_ID = '5000' and ARTIST_ID = '5001',则无法取回数据,因为ARTIST_ID只能是一个条目。
根据您的评论,每行数据只有一个歌曲ID和一个艺术家ID。因此,假设您的数据如下所示:
| 歌曲标识|艺术家标识|
| - -|- -|
| 二○ ○ ○年|五千|
| 二OO一年|小行星5001|
| 二OO二年|五千|
| 二OO二年|小行星5001|
您可以使用子查询将数据分割成两个数据表,然后寻找相符的配对。例如:

With artist5000 as {
Select Distinct SONG_ID from SONG_ARTIST
Where ARTIST_ID = '5000'
},
artist5001 as {
Select Distinct SONG_ID from SONG_ARTIST
Where ARTIST_ID = '5001'
}

Select *
From artist5000
where Song_ID in (Select * from artist5001);

如果愿意,您也可以稍微修改一下输出。例如,如果您希望数据看起来像这样:
| 歌曲标识|艺术家标识|
| - -|- -|
| 二○ ○ ○年|5000、5001|
您可以将最后一个查询更改为:

Select *, '5000,5001' as ARTIST_IDs
From artist5000
where Song_ID in (Select * from artist5001);

相关问题