子查询返回了1个以上

时间:2018-11-15 14:35:14

标签: sql sql-server tsql

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

在这段代码中得到该错误:

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,但这只是将我的结果限制在第一位作者。

2 个答案:

答案 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)

我将EXISTSIN子句一起使用:

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子句。