【问题标题】:SQL Invalid Column Name (I think it's becasue of null value)SQL无效的列名(我认为这是因为空值)
【发布时间】:2012-05-05 01:28:21
【问题描述】:

我有一个嵌套的 SQL 选择语句,其中子选择依赖于父选择的值。但是,由于空值(我认为),查询失败。 如何让查询在每次遇到空值时忽略子选择语句?

这是我的查询:

SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
        (SELECT ID
         FROM  SpecProducts
         WHERE (Hierarchy = ParentHierarchy)) AS ParentHierarchy

FROM          SpecProducts AS SpecProducts_1
WHERE        (EnableDisable IS NULL)
ORDER BY Hierarchy

这是我的错误信息:

列名“ParentHierarchy”无效

******************** 编辑:24/04/2012 - 14:50 *****************

感谢您指出错误。不幸的是,我仍然遇到同样的问题。

这是更新后的查询:

SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
                         (SELECT  ID
                          FROM    SpecProducts
                          WHERE  (Hierarchy = ParentHierarchy)) AS ParentID
FROM    SpecProducts AS SpecProducts_1
WHERE   (EnableDisable IS NULL)
ORDER BY Hierarchy

错误信息: 列名“父层次结构”无效

问题是因为 ParentHierarchy 值可以为 NULL 吗?

** 编辑 ************

好的,这可行:

SELECT   ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
         (SELECT   ID AS IDd
          FROM     SpecProducts
          WHERE    (Hierarchy = SpecProducts_1.Hierarchy.GetAncestor(1))) AS ParentID
FROM            SpecProducts AS SpecProducts_1
WHERE        (EnableDisable IS NULL)
ORDER BY Hierarchy

【问题讨论】:

  • 是错字还是您命名了两列 ParentHierarchy?

标签: sql sql-server-2008 select


【解决方案1】:

您有两个名为 ParentHierarchy 的字段。您需要将第二个字段更改为其他名称。此外,您正在尝试在嵌套的 SELECT 语句中引用别名。尝试引用 GetAncestor(1) 方法。

【讨论】:

    【解决方案2】:

    使用名称ParentHierarchy 两次。试试

    SELECT ID, ..., Hierarchy.GetAncestor(1) AS ParentHierarchy,
        (SELECT ID
         FROM  SpecProducts
         WHERE (Hierarchy = ParentHierarchy)) AS ParentHierarchyID ...
    

    【讨论】:

    • 啊是的,我有!感谢您发现这一点。感谢您的帮助
    【解决方案3】:

    这是因为您试图将名称 ParentHierarchy 赋予主 SELECT 语句中的 2 个不同列:

    Hierarchy.GetAncestor(1) AS ParentHierarchy
    

    (SELECT ID ...) AS ParentHierarchy
    

    【讨论】:

      【解决方案4】:
      SELECT ID, Hierarchy, Name, Hierarchy.GetLevel() AS Level, Hierarchy.GetAncestor(1) AS ParentHierarchy,
              (SELECT ID
               FROM  SpecProducts as sp2
               WHERE (sp2.Hierarchy = SpecProducts_1.Hierarchy)) AS ParentHierarchy2
      
      FROM          SpecProducts AS SpecProducts_1
      WHERE        (EnableDisable IS NULL)
      ORDER BY Hierarchy
      

      【讨论】:

      • 这确实运行,但是我没有得到 ParentHierarchy2 值的正确结果。 ** 请注意,ParentHierarchy2 实际上应该称为 ParentID。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2013-10-09
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多