SQL子查询无效的列名称

时间:2014-05-22 04:52:57

标签: sql subquery

SELECT 
    ISBN, CopyNo, DateOut 
FROM 
    LOAN 
WHERE 
    **Title** = (SELECT Title FROM Book WHERE Title LIKE '%Stuart Little%');


SELECT 
    ISBN, Title, YearPublish 
FROM 
    Book 
WHERE 
    **Name** = (SELECT Name FROM Author WHERE Name LIKE '%Pan Books%');

我似乎无法找到上述代码的任何问题。它一直说'#34;列名无效"当我把光标放在粗体项目上时。列确实存在,我试图刷新并打开和关闭程序:(我似乎无法解决这个问题。谢谢!

3 个答案:

答案 0 :(得分:0)

“子查询”可能会返回多个记录,因此您不能使用“=”。改为使用“in”:

SELECT ISBN, CopyNo, DateOut FROM LOAN WHERE Title in (SELECT Title FROM Book WHERE Title LIKE '%Stuart Little%');

SELECT ISBN, Title, YearPublish FROM Book WHERE Name in (SELECT Name FROM Author WHERE Name LIKE '%Pan Books%');

答案 1 :(得分:0)

列存在,但这不是=的工作方式。您需要使用关键字IN而不是=。以下是有关它的更多信息:http://www.techonthenet.com/sql/in.php ...

您也可以这样做(如果我正确理解了架构)...... SELECT ISBN, Title, YearPublish FROM Book, Author WHERE Name LIKE '%Pan Books%';

答案 2 :(得分:0)

就像你从不同的表中混合了一些列。您应该发布表结构以获得正确的答案。所以我猜 - LOAN表没有TITLE列。它似乎属于BOOK表。我看到两个表中都存在ISBN字段,因此您应该使用以下内容。请注意,您应该避免将=与子查询一起使用,因为它可以返回多行并且您将收到错误。您应该使用IN代替。

SELECT 
    ISBN, CopyNo, DateOut 
FROM 
    LOAN 
WHERE 
    ISBN IN (SELECT ISBN FROM Book WHERE Title LIKE '%Stuart Little%');

现在是你的第二个查询。我认为BOOK表没有字段NAME(谁的名字?)。我认为BOOK表有AUTHOR_NAME之类的东西?

然后它应该看起来像

SELECT 
    ISBN, Title, YearPublish 
FROM 
    Book 
WHERE 
    AUTHOR_NAME LIKE '%Pan Books%';