Mysql 子查询返回多个行,但我希望它

Mysql 子查询返回多个行,但我希望它,mysql,sql,subquery,Mysql,Sql,Subquery,我正在尝试对我的音乐数据库进行查询 我的数据库的相关部分如下所示: CREATE TABLE ARTIST ( artistid integer(3) auto_increment not null, name varchar(30) not null, //other columns CONSTRAINT ALBUM_pk PRIMARY KEY (artistid) ); CREATE TABLE SONG ( songid integer(5) auto_increm

我正在尝试对我的音乐数据库进行查询

我的数据库的相关部分如下所示:

CREATE TABLE ARTIST (
artistid    integer(3)  auto_increment  not null,
name    varchar(30) not null,
//other columns
CONSTRAINT ALBUM_pk PRIMARY KEY (artistid)
);

CREATE TABLE SONG (
songid  integer(5)  auto_increment  not null,
lineupid    integer(5)  not null,
title   varchar(50) not null,
//other columns
CONSTRAINT SONG_pk PRIMARY KEY (songid),
CONSTRAINT SONG_fk_ARTIST FOREIGN KEY (lineupid)
    REFERENCES ARTISTLINEUPLINEUP (artistlineupid),
CONSTRAINT SONG_fk_GENRE FOREIGN KEY (genreid)
    REFERENCES GENRE (genreid)
);

CREATE TABLE ARTISTLINEUP (
artistlineupid  integer(3)  auto_increment not null,
lineupid    integer(5)  not null,
artistid    integer(3)  not null, 
CONSTRAINT ARTISTLINEUP_pk PRIMARY KEY (artistlineupid),
CONSTRAINT ARTISTLINEUP_fk_ARTIST FOREIGN KEY (artistid)
    REFERENCES ARTIST (artistid),
CONSTRAINT ARTISTLINEUP_fk_LINEUP FOREIGN KEY (lineupid)
    REFERENCES LINEUP (lineupid)
);
我试图让所有的歌曲都由一位艺术家创作,他有多个阵容

SELECT title
FROM song
WHERE lineupid = (
    SELECT artistlineupid
    FROM artistlineup
    WHERE artistid = (
        SELECT artistid
        FROM artist
        WHERE name = "Black Sabbath"));
但是,它给了我以下错误:

#1242 - Subquery returns more than 1 row
这是正确的,因为该艺术家有多个阵容,因此返回两个数字。为什么它不能返回带有两个lineupid的歌曲?我怎样才能让它工作


谢谢

尽管您可以用不同的方式表达查询,但如果您想比较多个值,请在中使用
,而不是
=

SELECT title
FROM song
WHERE lineupid IN (
    SELECT artistlineupid
    FROM artistlineup
    WHERE artistid IN (
        SELECT artistid
        FROM artist
        WHERE name = "Black Sabbath"));

如果artistid在名称方面是唯一的,则还可以使用limit

SELECT title
FROM song
WHERE lineupid = (
    SELECT artistlineupid
    FROM artistlineup
    WHERE artistid = (
        SELECT artistid
        FROM artist
        WHERE name = "Black Sabbath" LIMIT 1));

在查询中写入“IN”,而不是给出“=”符号

表示在where子句中使用了两次“=”运算符。请将其替换为“in”,然后尝试查询

你会得到结果的

谢谢,


Phani kumar。

您无法将艺术家id与一组艺术家id进行比较。也许你想用在