MySQL - 如何选择所有孩子都有状态的记录('A','B')?

时间:2016-01-29 05:08:07

标签: mysql

对于我的问题,我有2张桌子
tb1名称案件
tb2名称呼叫

我必须选择Case,所有Calls包含状态('A','B')

例如:

案例A有3个电话 呼叫A.1具有状态A
呼叫A.2具有状态A
呼叫A.3具有状态B

案例B有3个电话 呼叫B.1具有状态A
呼叫B.2具有状态B
呼叫B.3具有状态C

因此,查询应返回案例A,因为在案例A中所有调用状态都在('A','B')

我的查询返回包含呼叫状态的所有案例记录,不仅包括A和B,还包括C.它不正确

select  c.id
from cases c join calls ca on (ca.parent_id = c.id and ca.parent_type = 'Cases') 
where c.status <> 'Closed' 
and ca.status in ('A','B')   
group by c.id

请问你能帮帮我吗? 谢谢,

3 个答案:

答案 0 :(得分:0)

select cs.*
from cases cs
join calls cl on cl.caseId = cs.title and cl.status in ('A', 'B');

答案 1 :(得分:0)

你的问题不明确。尽管如此,我会尽力回答:

select b.calls from tb1 a, tb2 b where a.status in ('A', 'B');

答案 2 :(得分:0)

我使用此查询来选择所有调用都是A和B的案例

SELECT DISTINCT `cases`.id,cases.status,children.status
FROM (`cases`)
LEFT OUTER JOIN `calls` children
  ON (`cases`.`id` = `children`.`parent_id`
  AND `children`.`parent_type` = 'Cases')

GROUP BY `cases`.`id`

HAVING 
    SUM(CASE `children`.`status` WHEN 'C' THEN 1 ELSE 0 END) = 0
and SUM(CASE `children`.`status` WHEN 'D' THEN 1 ELSE 0 END) = 0

[已解决]有关详情,请参阅链接Link