问题描述
我需要选择同时具有 status = pending & processing 的 parent_ids
,或者同时具有 status = cancelled 和 processing 的 parent_ids
。按 parent_id
分组。
我只设法获得了 parent_ids
处于待定、处理中或取消状态的状态,这不是我需要的。我需要双重条件。
我尝试过类似的东西:
select parent_id,status from tableName
where status = ('processing' and 'pending')
or status = ('processing' and 'canceled') group by parent_id
解决方法
SELECT parent_id
FROM tableName
GROUP BY parent_id
HAVING SUM(status = 'processing')
AND SUM(status IN ('pending','cancelling'));
查询会检查特定的 parent_id
行(至少一个)是否存在“正在处理”和一行“待处理”/“正在取消”(其中之一)。
或者你可以使用
SELECT DISTINCT parent_id
FROM tableName t1
JOIN tableName t2 USING (parent_id)
WHERE t1.status = 'processing'
AND t2.status IN ('pending','cancelling');
此查询执行相同的操作,但采用另一种形式。
另一种选择:
SELECT DISTINCT parent_id
FROM tableName t1
WHERE status = 'processing'
AND EXISTS ( SELECT NULL
FROM tableName t2
WHERE t1.parent_id = t2.parent_id
AND t2.status IN ('pending','cancelling') );