我有这个:
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”陈述?
答案 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
语句中不可为空时,最终结果集中的列才是非可空的。