MySQL中不考虑分组的逻辑位置

1wnzp6jl  于 2023-05-16  发布在  Mysql
关注(0)|答案(2)|浏览(153)

我有以下表格结构/数据:
| 身份证|日期(DATE)|小时(INT)|计数(INT)|和(INT)|
| --------------|--------------|--------------|--------------|--------------|
| 1| 2023-05-15 2023-05-15 2023-05-15|七|十二岁|二|
| 二|2023-05-15 2023-05-15 2023-05-15|七|1|四个|
使用以下查询:

SELECT * FROM `table` WHERE
((`date` >= '2023-05-15') AND (`hour` >= '4')) AND ((`date` <= '2023-05-16') AND (`hour` <= '4')) ORDER BY `id` DESC LIMIT 0,1000;

我的期望是返回示例中的数据。我有两个离散的where条件(括号)。相反,当我运行查询时,没有返回任何数据。
有人能指出为什么数据没有被返回吗?

zbq4xfa0

zbq4xfa01#

您的查询相当于以下内容:

SELECT * FROM `mytable` WHERE
`date` between '2023-05-15' and '2023-05-16'
AND 
`hour` >= 4 AND `hour` <= '4'
ORDER BY `id` 
DESC LIMIT 0,1000;

或者更准确地说:

SELECT * FROM `mytable` WHERE
`date` between '2023-05-15' and '2023-05-16'
AND 
`hour`= '4'
ORDER BY `id` 
DESC LIMIT 0,1000;

因为没有hour = 4的记录,所以结果将为空。

gopyfrb3

gopyfrb32#

你需要的是

SELECT
  *
FROM
  `table`
WHERE
  (
    (`date` = '2023-05-15' AND `hour` >= '4')
    OR
    (`date` > '2023-05-15')
  )
  AND
  (
    (`date` = '2023-05-16' AND `hour` <= '4')
    OR
    (`date` < '2023-05-16')
  )
ORDER BY
  `id` DESC
LIMIT
  0,1000

这就是为什么你永远不应该把日期和时间分开。
这就像存储1.25作为...
| 单位|十分之一|百分之一|
| --------------|--------------|--------------|
| 1|二|五|

相关问题