mysql - 具有多个 SELECT 语句的 SQL

标签 mysql sql select

您好,我的 SQL 有一点问题。我的问题是,当我过滤数据的日期时,我的 SQL 语句仅返回 2 条记录,即用户的 employee_id。

这是我在过滤日期时工作代码的原始语句:

SELECT * FROM `rmguidef_prs`.`payment_report` WHERE DATE(`Report_Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR)  AND Employee_ID IN (
                               SELECT T1.Employee_ID from `rmguidef_prs`.`employee` T1
                               WHERE T1.Supervisor_ID = '".$id."')
                               OR Employee_ID = '".$id."'

这是我需要过滤器的修改后的语句:(工作正常)

 SELECT * FROM `report` WHERE Employee_ID IN (
                               SELECT T1.Employee_ID from `employee` T1
                               WHERE T1.Supervisor_ID = '".$id."')
                               OR Employee_ID IN (
                               SELECT T2.Manager_ID from `branches` T2
                               WHERE T2.Manager_ID = '".$id."')
                               OR Employee_ID = '".$id."'

但是当我在语句中添加以下内容: DATE(Timestamp) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR) 来过滤日期时,显示的唯一记录是来自此:OR Employee_ID = '".$id."'

SELECT * FROM `report` WHERE DATE(`Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR) AND Employee_ID IN (
                           SELECT T1.Employee_ID from `employee` T1
                           WHERE T1.Supervisor_ID = '".$id."')
                           OR Employee_ID IN (
                           SELECT T2.Manager_ID from `branches` T2
                           WHERE T2.Manager_ID = '".$id."')
                           OR Employee_ID = '".$id."'

我希望按照今天的日期、周、月和过去 3 个月过滤修改后的 SQL 语句。我已经必须为这些过滤器编写代码,但我不知道如何将它们添加到我的语句中。

最佳答案

在组条件中添加括号:

SELECT * 
FROM `report` 
WHERE DATE(`Timestamp`) = DATE_ADD(CURDATE(), INTERVAL 24 HOUR) 
  AND (   Employee_ID IN (SELECT T1.Employee_ID 
                          FROM `employee` T1
                          WHERE T1.Supervisor_ID = '".$id."'
                          )
       OR Employee_ID IN (SELECT T2.Manager_ID 
                          FROM `branches` T2
                          WHERE T2.Manager_ID = '".$id."'
                          )
       OR Employee_ID = '".$id."'
      )

AND优先于OR ,因此您的日期标准仅被考虑用于三个 Employee_ID 中的第一个标准。

编辑:重新阅读您的问题后,我不完全确定上述内容是否是您所追求的,您的日期条件只会返回明天日期的记录,这可能不存在于 Timestamp 中。字段,所以这可能是真正的问题。

关于mysql - 具有多个 SELECT 语句的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954150/

相关文章:

php - 在 PHP 中显示 MySQL 执行时间

mysql - 当我在亚马逊 ec2 微实例中收到 "mysqld dead but subsys locked"时该怎么办?

c++ - 如何使用 mysql.h 在 C++ 中处理 MySQL NULL?

mysql - 从 MySQL 中的连接表中查询特定的元字段

MySQL 选择唯一排序字段值

html - 如何修复 OS X 选择 html 标签行为?

mysql - 将 regexp 模式压缩为更短的 mysql 查询正则表达式

sql - 流畅地在 t-sql 中添加值

php - 使用 JOIN 的 SELECT 命令的 MySQL 列信息

jQuery - 如果点击 DIV 中的文本