我正在编写一个左连接
并得到一个
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/