gpt4 book ai didi

mysql - UNION 结果集部分与单独的 SELECT 不同

转载 作者:行者123 更新时间:2023-11-29 07:02:39 25 4
gpt4 key购买 nike

查询

(SELECT timest, `char`, exp_cnt AS XP FROM `charac` WHERE DATE(timest)='2017-01-30')
UNION
(SELECT timest, `char`, -exp_cnt AS XP FROM `charac` WHERE DATE(timest)=ADDDATE('2017-01-30',-1))
ORDER BY `char` ASC
LIMIT 50

给了我这个结果:
UNION querry

如果日期为 01-29,则值通常不应为 0
我尝试通过复制粘贴并运行第二个SELECT来调试它:

SELECT timest, `char`, -exp_cnt AS XP FROM `charac` WHERE DATE(timest)=ADDDATE('2017-01-30',-1)  
ORDER BY `char` ASC

我得到了正确的结果!
individual mysql select

为什么?我很困惑。 UNION ALL 没有帮助。

最佳答案

首先,您应该使用 union all 而不是 union ,除非您想承担删除重复项的开销。

其次,您对查询有限制。因此,您的结果可能正在生成,它们只是在列表的下方和截止位置。

如果您关心 2017 年 1 月 29 日发生的事情,请按日期对列表进行排序并以这种方式进行比较:

(SELECT timest, `char`, exp_cnt AS XP
FROM `charac`
WHERE DATE(timest) = '2017-01-30'
) UNION ALL
(SELECT timest, `char`, -exp_cnt AS XP
FROM `charac`
WHERE DATE(timest) = ADDDATE('2017-01-30', -1)
)
ORDER BY timest ASC
LIMIT 50;

这可能不是您想要的最终结果,但您至少会看到所有行都已被考虑在内。

如果您不希望 29 日出现 0 值,请明确将其放入查询中:

(SELECT timest, `char`, exp_cnt AS XP
FROM `charac`
WHERE DATE(timest) = '2017-01-30'
) UNION ALL
(SELECT timest, `char`, -exp_cnt AS XP
FROM `charac`
WHERE DATE(timest) = ADDDATE('2017-01-30', -1) AND
exp_cnt <> 0
)
ORDER BY timest ASC
LIMIT 50;

关于mysql - UNION 结果集部分与单独的 SELECT 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com