首页 > 解决方案 > 在 1 个查询中组合 2 个逻辑 SQL 语句

问题描述

我的问题是:如何将 2 个逻辑语句组合成 1 个 SQL 查询。它们都必须单独为真,但在一个陈述中为真的东西不一定在另一个陈述中为真,例如 meta_value 更大应该只在我要求开始课程时才为真,反之亦然。
这是我到目前为止所尝试的:

SELECT DISTINCT course_id FROM `wp_database`
WHERE (meta_key = 'begin' AND meta_value > 1604185200)
AND (meta_key = 'end' AND meta_value < 1619372800)

这是我的数据库结构:

meta_id | course_id | meta_key | meta_value
-------------------------------------------
 1      | 1         | name     | Test1
 2      | 1         | begin    | 1604230000
 3      | 1         | end      | 1604270000
 4      | 2         | name     | Test2
 5      | 2         | begin    | 1623372800
 6      | 2         | end      | 1623385800

目前我没有收到任何输出。

标签: mysqlsql

解决方案


我认为您想要聚合having并将多行组合成结果集的单行:

SELECT course_id
FROM `wp_database`
GROUP BY course_id
HAVING MAX(meta_key = 'begin' AND meta_value > 1604185200) > 0 AND
       MAX(meta_key = 'end' AND meta_value < 1619372800) > 0;

HAVING子句正在检查组中的某些行是否存在条件。


推荐阅读