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



我究竟做错了什么?

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 但不确定如何。

先谢谢您的帮助。

最佳答案

您需要一个列别名(下面的 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/

10-13 09:53