0

我有这个:

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

4

3 回答 3

1

a 中的列名和列数据类型UNION由. 随后的 `select 语句中的任何列名都将被忽略。selectUNION

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

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

于 2012-08-22T19:30:04.717 回答
1

UNION确实是UNIONfor COLUMS,而不是 forrows 所以,它采用第一个选择,获取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'
于 2012-08-22T19:14:25.780 回答
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
于 2012-08-22T19:23:11.340 回答