无法加入两个临时表

问题描述

我一直试图连接两个临时表,但是即使使用列别名,我仍然收到一条错误消息“ Ambiguous column name”。仅供参考,这是sql Server编程。

select ID,count(PageNum) as Frequency 
into temp_list
from ID_USA
group by ID

select ID,ISNULL(PageNum1,'') +','+ISNULL(PageNum2,'+ISNULL(PageNum3,'+ISNULL(PageNum4,'+ISNULL(PageNum5,'') As PageNum
from temp_table k 
left join temp_list c on c.ID = k.ID

错误消息显示列名“ ID”不明确。

有人可以帮忙吗?谢谢。

解决方法

两个表中都存在列id,因此查询中不合格的id含糊不清-您在select子句中有此列。

考虑为该列添加表别名-由于您有left join,因此我选择了左表:

select k.ID,concat_ws(',',c.pageNum1,c.PageNum2,c.pageNum3,c.pageNum4,c.pageNum5) As PageNum
from temp_table k 
left join temp_list c on c.ID = k.ID

基于所有pageNum列都来自正确表的假设,我也为其添加了前缀。

请注意,我将+字符串的连接更改为concat_ws():尽管这与原始表达式完全不同,但已经足够接近了(很多更简洁)值得一提。

,

首先,没有理由至少在第一次查询时就使用临时表。

第二,正如GMB所指出的,您需要合格的列名。

第三,您可以使用concat()函数更简单地精确复制逻辑(因为concat()忽略NULL值)。

所以,我建议:

with temp_list as (
      select ID,count(PageNum) as Frequency 
      from ID_USA
      group by ID
     )
select k.ID,concat(c.PageNum1,c.PageNum3,c.PageNum4,c.PageNum5) as PageNum
from temp_table k left join
     temp_list c
     on c.ID = k.ID;

请注意,查询中的每个列引用都以表别名开头。这样的合格列引用永远不会模棱两可。

当然,如果您出于其他原因需要保留temp_list,则可以保留。但是您不需要此查询的临时表。