【问题标题】:MySQL - How to select records that all child has status in ('A','B')?MySQL - 如何选择所有孩子在('A','B')中具有状态的记录?
【发布时间】:2016-01-29 19:11:36
【问题描述】:

对于我的问题,我有 2 张桌子。

tb1 命名案例
tb2 名称 来电

我必须选择所有呼叫都在 ('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

你能帮帮我吗?
谢谢,
五月

【问题讨论】:

  • 你的问题很不清楚。您能否提供示例表数据,以及您希望查询返回的内容?
  • @shmosel 我刚刚更新了更多内容。
  • 阅读stackoverflow.com/help/how-to-ask,了解如何使您的问题更具可读性和清晰性。
  • @SameerMirji 谢谢 :)

标签: mysql


【解决方案1】:
select cs.*
from cases cs
join calls cl on cl.caseId = cs.title and cl.status in ('A', 'B');

【讨论】:

  • 这将返回两种情况,而不仅仅是 A
【解决方案2】:

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

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

【讨论】:

  • 这将返回 b 中的所有行相乘,因为表之间没有连接条件。条件也是错误的。
【解决方案3】:

我使用这个查询来选择所有呼叫都是 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了解更多信息。

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多