AS ____无法在“联盟选择声明”中工作

时间:2012-08-22 19:11:52

标签: sql union

我有这个:

SELECT
COUNT(resurs_id) AS 'antalLikes'
FROM kopplaResursLikesUsers
WHERE resurs_id = 19
UNION
SELECT user_id AS 'gillarJagEller'
FROM kopplaResursLikesUsers
WHERE user_id = 5

我认为输出将是:

antalLikes = 2
gillarJagEller = 5

但我得到的结果是:

antalLikes[0] = 2
antalLikes[1] = 5

为什么它完全忽略了我的第二个“AS”陈述?

3 个答案:

答案 0 :(得分:1)

UNION确实为UNION制作了COLUMS,而不是rows 所以,它是第一个选择,得到column 'antalLikes' 然后按顺序命令union。 因此,它会将'gillarJagEller' column中的值放在第一个

为了得到你想要的结果,我建议:

select
(
SELECT
COUNT(resurs_id) 
FROM kopplaResursLikesUsers
WHERE resurs_id = 19) AS 'antalLikes',
(
 SELECT user_id 
 FROM kopplaResursLikesUsers
 WHERE user_id = 5) AS 'gillarJagEller'

答案 1 :(得分:1)

UNION仅将第一个select语句中指定的名称作为列名,在本例中为“antalLikes”。

要得到这个:

antalLikes = 2 gillarJagEller = 5

你需要这样的东西:

SELECT
COUNT(resurs_id) AS 'antalLikes', 
(SELECT top 1 user_id
FROM kopplaResursLikesUsers
WHERE user_id = 5) AS 'gillarJagEller'
FROM kopplaResursLikesUsers
WHERE resurs_id = 19

答案 2 :(得分:1)

UNION中的列名称和列数据类型由select中的第一个UNION语句提供。随后的`select语句中的任何列名都将被忽略。

select中的后续UNION语句必须与第一个select语句具有相同的列数。此外,每个后续select语句中的每个列的数据类型必须与第一个select语句中具有相同序号的列相同,或者可以隐式转换为该数据类型。

WRT to nullity,我相信UNION通过检查每个组件select语句中同一列的无效性来设置最终结果集中每列的无效性。只有当该列在每个组件select语句中不可为空时,最终结果集中的列才是非可空的。