gpt4 book ai didi

Mysql - 忽略 where 子句中的状态

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

我尝试使用此查询来获取所选健身房的所有用户。

我的问题是查询忽略了这部分:ual.user_id = weekUsers.user_id

查询似乎获取了与我选择的日期匹配的所有用户 ID,而不检查该用户是否在我想要选择的健身房中。

在我放置的图像中,您可以看到 ual.user_idweekUsers.user_id 不相等,但我仍然在结果中得到了它们。

这是我的查询:

SELECT count(ual.user_id), FROM_DAYS(TO_DAYS(ual.time) -MOD(TO_DAYS(ual.time) -1, 7)) as weekNum, 

ual.user_id, weekUsers.user_id, u.id, u.gym

FROM user_activity_log ual

LEFT OUTER JOIN user u

ON u.gym = 3

LEFT OUTER JOIN (SELECT ualWeek.user_id FROM user_activity_log ualWeek

GROUP BY FROM_DAYS(TO_DAYS(ualWeek.time) -MOD(TO_DAYS(ualWeek.time) -1, 7)), ualWeek.user_id

HAVING count(ualWeek.user_id) > 1) weekUsers

ON u.id = weekUsers.user_id

WHERE

(ual.time BETWEEN '2014-02-09' AND '2015-02-09') OR (('2014-02-09' IS NULL) OR ('2015-02-09' IS NULL))

AND ual.user_id = weekUsers.user_id

GROUP BY ual.user_id

enter image description here

最佳答案

让我们解释一下您的 (ual.time BETWEEN '2014-02-09' AND '2015-02-09') OR (('2014-02-09' IS NULL) OR ('2015-02- 09' IS NULL)) 表达式。

(ual.time BETWEEN '2014-02-09' AND '2015-02-09') 表示为 A(('2014- 02-09' IS NULL) OR ('2015-02-09' IS NULL)) 作为 B 我们得到 A 或 B

所以我们有A或B AND ual.user_id = weekUsers.user_id

由于默认操作优先级,它将被解释为 A 或 (B AND ual.user_id = weekUsers.user_id) 因此,如果 A 为 true,则整个逻辑表达式为 true,并且 ual.user_id = weekUsers.user_id 不会被检查,只是被忽略。

您可以引用http://www.bennadel.com/blog/126-sql-and-or-order-of-operations.htmhttp://www.bennadel.com/blog/126-sql-and-or-order-of-operations.htm有关运算符优先级的更多详细信息。

关于Mysql - 忽略 where 子句中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415452/

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