2012-08-22 51 views
0

我有这方面的工作:AS ____不是在 “联盟SELECT语句”

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”声明?

回答

1

UNION会使得一个UNIONCOLUMS,而不是为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' 
+0

TY TY TY !!有用!!! :D:D:D – Alisso

1

联盟借此列名仅在第一个SELECT语句中指定的名称,在这种情况下,“antalLikes”。

为了得到这个:

antalLikes = 2 gillarJagEller = 5

你需要的东西是这样的:在一个UNION

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 
1

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

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

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