将2个逻辑SQL语句组合到1个查询中



我的问题是:如何将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

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

我认为您希望聚合和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子句正在检查组中某一行是否存在条件。

您需要UNION运算符。试试看:

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

最新更新