【问题标题】:Getting “No column was specified for column 1" when joining a derived table加入派生表时出现“未为第 1 列指定列”
【发布时间】:2014-02-17 02:39:54
【问题描述】:

我正在写一个left join 并得到一个

没有为第 1 列指定列”错误。

我做错了什么?

LEFT JOIN 
(
   SELECT  CASE WHEN COUNT(*) > 1 THEN '' ELSE mycolumn END
   FROM 
    (
        SELECT code_value 
        FROM allocation 
        WHERE allocation.id='[val]'
        GROUP BY code_value
    ) grp
   GROUP BY code_value
) AS code4table
ON code4table.itemid = table1.id

如果所有值都相同,我想返回 code_value 值 else return '' 我猜我还需要在我的选择查询中包含code4table.itemid,但不确定如何。

提前感谢您的帮助。

【问题讨论】:

  • @Mithil:“SQL”不是 DBMS 产品。它是“查询语言”。Postgres、Oracle、Firebird、DB2 ......它们都使用“SQL”。由于您发布的代码,我们可以看到您正在使用 SQL。但是我们需要知道您使用的是哪个 DBMS。

标签: sql-server join


【解决方案1】:

您需要一个列别名(下面是ALIASCOLUMN):

LEFT JOIN (
   SELECT  CASE WHEN COUNT(*) > 1 THEN '' ELSE mycolumn END AS ALIASCOLUMN
   FROM
   ...
) AS ALIASTABLE
ON ALIASTABLE.ALIASCOLUMN = outertable.column

在您的情况下,ALIASCOLUMN 名称应为 itemid 以匹配外部连接命名。

(因为您正在使用 case / when 派生一个新列,即使您在 ELSE 中有一个命名列 mycolumn,Sql 也不会默认派生列名称为此)。如果这样做有意义,您可以保留相同的列名 (mycolumn) 并更改最后的 ON 以匹配。

【讨论】:

    猜你喜欢
    • 2019-06-23
    • 2016-09-15
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2016-11-05
    • 2020-07-26
    • 2018-04-17
    相关资源
    最近更新 更多