mysql - 具有多个条件和子选择的 SQL 查询

标签 mysql sql

我对使用连接和从多个表中进行选择还很陌生。我已经成功地弄清楚了如何根据多种条件从 2 个表中获取数据。现在我的问题是,只有在满足另一个条件的情况下,我才需要返回一个计数。思路是这样的: 我有一个查询返回在特定时间处于特定状态的项目数。我对此的查询是:

SELECT count(*),
       e.campus_id,
       e.course_id
FROM statuses_history AS sh,
     enrolments AS e
WHERE sh.date_added > '2015-08-01 00:00:00'
  AND sh.date_added < '2015-08-20 23:59:59'
  AND sh.status_id = 57
  AND sh.item_id = e.enrolment_id
  AND (e.course_id = 2
       OR e.course_id =7
       OR e.course_id = 8
       OR e.course_id = 9)
GROUP BY e.campus_id,
         e.course_id;

现在我必须检查它是否处于不同的状态,假设它在 57 之前是 sh.status_id = 50。它也不必落在指定的数据范围内。因此,我基本上需要以某种方式更改我的查询,以选择它是否曾经处于 status_id 50 中,然后仅在找到两种状态时才返回结果。 sh.status_id =57 将受指定日期的约束。

在此先感谢您的帮助。

最佳答案

您可以根据需要调整子选择,但如果在数据库中找到另一个值,这将返回一行。

我不喜欢子选择,但这应该可行。我没有测试语法。

select count(*), e.campus_id, e.course_id
FROM statuses_history as sh, enrolments as e
WHERE sh.date_added > '2015-08-01 00:00:00'
      AND sh.date_added < '2015-08-20 23:59:59'
      AND sh.status_id = 57
      AND sh.item_id = e.enrolment_id
      AND (e.course_id = 2 OR e.course_id =7
          OR e.course_id = 8 OR e.course_id = 9)
      AND EXISTS (select sh2.status_id from statuses_history as sh2
                 WHERE NOT sh2.status_id = 57
                   AND sh2.item_id = e.enrolment_id)
GROUP BY e.campus_id, e.course_id;

关于mysql - 具有多个条件和子选择的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273374/

相关文章:

sql - 查找连续序列并建议序列中的下一个数字

mysql - 使用 MySQL Workbench 在已经索引的列上创建外键

php - 为用户注册插入数据 PHP/PDO

sql - 数据库复制是保持生产和开发数据库同步的方法吗?

php - 如何从具有多个键和值的多维数组中获取唯一键和关联值的数组

php - CakePHP 数学计算领域?

mysql - Join 子查询 - Where 语句

php - 从 csv 文件中读取第一行并根据它创建表(csv 文件字段)

mysql - 自动增量重置为 0,但无法插入 id=0 的值。值 >0 时不会发生

MySQL 错误 1822 : Failed to add foreign key constraint; missing index for contraint BUT index exists