【问题标题】:SQL Subquery Invalid Column NameSQL 子查询无效的列名
【发布时间】:2014-05-22 04:52:57
【问题描述】:
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%');

我似乎找不到上面的代码有任何问题。当我将光标放在粗体项目上时,它一直说“无效的列名”。这些列确实存在,我尝试刷新并打开和关闭程序:(我似乎无法解决这个问题。谢谢!

【问题讨论】:

  • 你能发布你的表结构吗?

标签: sql subquery


【解决方案1】:

“子查询”可能返回多条记录,因此您不能使用“=”。改用“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%');

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      就像您混合了来自不同表的列。您应该发布您的表格结构以获得正确答案。所以让我猜猜 - 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 (Whoose name?) 。我认为BOOK 表有类似AUTHOR_NAME 的东西?

      那么它应该是这样的

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-05
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多