gpt4 book ai didi

mysql - 如何将多个 WHERE 子句分组在括号中以获得更准确的结果

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

我有一个存储用户信息的表。如果满足 3 个不同的条件,我将尝试从表中获取匹配项。这些条件单独工作但在分组时不起作用,尽管所有条件都为真。 SQL语句有3种不同的条件;

  1. 括号中的几个OR条件
  2. 括号中的两个AND条件
  3. 括号中的一个条件。

这是声明。

SELECT DISTINCT userId 
FROM userinfo_table
WHERE ((questionName IN("cars") AND intValue & 3) OR
(questionName IN("farms") AND intValue & 3) OR
(questionName IN("pets") AND intValue & 5)
) AND
(questionName="birthdate" AND 566092800<=UNIX_TIMESTAMP(dateValue)7 7 <=1572480000) AND
(userId <> 3)
LIMIT 0, 20

条件 1 是:

(questionName IN("cars") AND intValue & 3) OR (questionName IN("farms") AND intValue & 3) OR (questionName IN("pets") AND intValue & 5)`

条件2是

 questionName="birthdate" AND 566092800<=UNIX_TIMESTAMP(dateValue)<=1572480000`

条件 3 是 用户 ID <> 3

请问我括号错了吗?或者我做错了什么?

最佳答案

问题不在于括号。问题是您想要比较同一 userId 的不同行上的值。您不能使用简单的 WHERE 子句来做到这一点。

这是我解释的你的查询:

SELECT DISTINCT userId
FROM userinfo_table
WHERE ((questionName IN ('cars') AND intValue & 3) OR
(questionName IN ('farms') AND intValue & 3) OR
(questionName IN ('pets') AND intValue & 5)
) AND
(questionName = 'birthdate' AND UNIX_TIMESTAMP(dateValue) <= 1572480000
) AND
userId <> 3;

(您的问题中条件 2 不清楚)。

显然,没有一行可以满足所有条件,因为 questionName 必须有多个值。我想你打算:

SELECT userId
FROM userinfo_table
WHERE ( ((questionName IN ('cars') AND intValue & 3) OR
(questionName IN ('farms') AND intValue & 3) OR
(questionName IN ('pets') AND intValue & 5)
) OR
(questionName = 'birthdate' AND UNIX_TIMESTAMP(dateValue) <= 1572480000
)
) AND
userId <> 3
GROUP BY userId
HAVING SUM(questionName = 'birthdate') > 0 AND -- at least one birthdate record
COUNT(DISTINCT questionName) > 1; -- at least one other matching record

编辑:

哦,我想我明白了条件 2。你不能那样写(好吧,你可以,但它不会像你想的那样。)

SELECT userId
FROM userinfo_table
WHERE ( ((questionName IN ('cars') AND intValue & 3) OR
(questionName IN ('farms') AND intValue & 3) OR
(questionName IN ('pets') AND intValue & 5)
) OR
(questionName = 'birthdate' AND
UNIX_TIMESTAMP(dateValue) >= 566092800 AND
UNIX_TIMESTAMP(dateValue) <= 1572480000
)
) AND
userId <> 3
GROUP BY userId
HAVING SUM(questionName = 'birthdate') > 0 AND -- at least one birthdate record
COUNT(DISTINCT questionName) > 1; -- at least one other matching record

关于mysql - 如何将多个 WHERE 子句分组在括号中以获得更准确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018129/

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