如何在表中选择具有所有所列性别的子女的母亲?(在SQL中实现RA Division)

  • 本文关键字:母亲 SQL 实现 Division RA 选择 sql
  • 更新时间 :
  • 英文 :


我有一个包含以下列的表(person):姓名、性别、母亲

,我需要提取有每个性别的婴儿的母亲的名字。我不允许假设性别仅限于M和f。

我可以执行SELECT DISTINCT person.gender FROM person以获得表中存在的所有性别的列表。

我还创建了一个表,将所有母亲的名字和孩子的性别作为两列。

问题是,我不知道如何检查母亲是否有表中所有性别的孩子。我该如何实现呢?

编辑:我如何实现我的最终解决方案可以在下面找到,感谢你们所有人的回答!我还更新了标题,以帮助其他人找到它。

将母亲的记录分组,并在每组中计算有多少种不同的性别。

SELECT
mother
FROM
person
GROUP BY
mother
HAVING
COUNT(DISTINCT gender) = (SELECT COUNT(DISTINCT gender) FROM person)

我最终处理了与@MatBailie相同的问题,但发现在最终查询中包含COUNT也很有用。要使这种类型的查询工作,基本上需要两样东西。1)不同母亲的集合;2)不同性别的数量。GROUP BY和聚合子查询在这里工作得很好。

SELECT COUNT(DISTINCT gender) AS genderCount, mother FROM person
GROUP BY mother
HAVING genderCount = (SELECT COUNT(DISTINCT gender) from person);

最后使用不同的EXCEPTIN条件将关系代数除法实现为SQL。当您有两列时,关系代数除法非常有效,其中某种标签(例如名称)连接到某种类型(例如性别),并且您希望查找特定标签是否链接到另一个单独表中指定的所有类型。

在我的例子中,标签列表是母亲的名字,与之相关的类型是她们孩子的性别。使用我在我的问题帖子中创建的SELECT声明,这给了我一个性别列表,每个母亲必须为我的查询。这是我的"类型"。表,所有的母亲都必须链接到。

最后我就是这样得到问题的答案的。

关于如何实现它的一个很好的,详细的指南在这里:https://www.geeksforgeeks.org/sql-division/

其他答案也可以,而且更简单,但这个解决方案感觉更通用,我认为应该分享!

最新更新