sql-server - 连接派生表时获取 “No column was specified for column 1"

标签 sql-server join

我正在编写一个左连接并得到一个

No column was specified for column 1" error.

我做错了什么?

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 值,否则返回 ''。我猜我还需要在我的选择查询中包含 code4table.itemid 但不知道如何。

最佳答案

除了派生表的别名 ( ALIASTABLE ) 之外,您还需要计算列的列别名 ( 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 派生一个新列,即使您在 mycolumn 中有一个命名列 ELSE ,Sql 也不会默认派生列名称为此)。如果这样做有意义,您可以保留相同的列名称 ( mycolumn ) 并更改最终的 ON来匹配。

关于sql-server - 连接派生表时获取 “No column was specified for column 1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360860/

相关文章:

sql - 如何在不显式定义连接表的情况下在sequelize中创建三向连接表

sql - 如何在第二个连接表中进行多个条件的连接?

sql - 从大型数据集中随机采样

mysql - 创建 FK 时出现语法错误,我是在 sql server 中正确添加用户输入的图片还是有其他方法

c# - SQL Server 和消息队列

SQL Server + 为表中的每个 masterID 仅选择两条记录

mysql - 与左表中的最后一条插入记录和右表中的所有记录进行左连接

来自多个表的 MySQL JOIN 语句

MySQL - 如何执行多重联接查询?

sql - 转换 HH :MM:SS