这个问题,让我郁闷了半天。
问题是这样的,我要求出所有部门所发布的文章数;
每个文章都会属于一个部门;部门id的列名是dep_id;
SQL语句如下
select dep_id,count(*) from article group by dep_id
意思很简单,按部门Id,分组计算;输出结果
dep_id ----------- -----------
69 88
92 85
115 29
138 31
77 74
107 45
85 88
62 86
146 29
注意,第一个数据列名称是dep_id,第二个数据列没有名称;这也很正常,对吧(问题就出在这里),先不说它;
然后呢,我要知道哪个dep_id对应哪个部门名称,自然要用一个外联接,部门表名为depart;
SQL语句如下:
select * from depart as a
left join
(select dep_id,count(*) from article where art_atit!='' group by
dep_id) as b
on a.dep_id=b.dep_id
上面的语句看样子是没有问题;左外接联接,联接一个查询结果b;结果一执行,报错了,错误信息:
消息 8155,级别 16,状态 2,第 1 行
没有为第 2 列(属于 'b')指定列。
我不太明白了,去网上查了查,也没有什么结果,看别人的相关评论,无意中看到“空列必须加AS”,哦,好像是……
select dep_id,count(*)这句,改成select dep_id,count(*) as 'count'
试试,代码如下:
select * from depart as a
left join
(select dep_id,count(*) as 'count' from article where art_atit!=''
group by dep_id) as b
on a.dep_id=b.dep_id
这样就正常了。
原来,在外联接时,列名不可以为空;像count(*)或avg(*)之类,后面一定要加上 as '列名'。