子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
在这段代码中得到该错误:
SELECT DISTINCT
A.Author_Name,
C.Title,
P.Publisher_ID,
P.Publisher_Name,
P.Location
FROM Auth_Book_MN MN
INNER JOIN
Author A ON A.Author_ID=MN.Author_ID
INNER JOIN
Library_Books L ON L.Book_ID=MN.Book_ID
INNER JOIN
Catalogue C ON L.ISBN=C.ISBN
INNER JOIN
Publisher P ON C.Publisher_ID=P.Publisher_ID
WHERE
MN.Author_ID = (SELECT Author_ID FROM Author WHERE Author_Name = 'McDonald' OR Author_Name='Ronald');
因此,基本上我需要列出作者姓名(2位作者),书名和一些出版商详细信息。如果一次仅是一位作者,但一次大于1,则我可以用同一段代码来实现。我该怎么办?我尝试做SELECT TOP 1
,但这只是将我的结果限制在第一位作者。
答案 0 :(得分:1)
尝试使用IN代替=
SELECT DISTINCT
A.Author_Name,
C.Title,
P.Publisher_ID,
P.Publisher_Name,
P.Location
FROM Auth_Book_MN MN
INNER JOIN
Author A ON A.Author_ID=MN.Author_ID
INNER JOIN
Library_Books L ON L.Book_ID=MN.Book_ID
INNER JOIN
Catalogue C ON L.ISBN=C.ISBN
INNER JOIN
Publisher P ON C.Publisher_ID=P.Publisher_ID
WHERE
A.Author_ID IN (SELECT Author_ID FROM Author WHERE Author_Name = 'McDonald' OR Author_Name='Ronald');
答案 1 :(得分:0)
我将EXISTS
和IN
子句一起使用:
SELECT DISTINCT A.Author_Name, C.Title, P.Publisher_ID, P.Publisher_Name, P.Location
FROM Auth_Book_MN MN INNER JOIN
Author A
ON A.Author_ID = MN.Author_ID INNER JOIN
Library_Books L
ON L.Book_ID = MN.Book_ID INNER JOIN
Catalogue C
ON L.ISBN = C.ISBN INNER JOIN
Publisher P
ON C.Publisher_ID = P.Publisher_ID
WHERE EXISTS (SELECT 1
FROM Author A1
WHERE A.Author_ID = A1.Author_ID AND A.Author_Name IN ('McDonald','Ronald')
);
注意:我使用IN
子句代替了OR
中奇怪的subquery
子句。