当前位置: 首页 > 面试题库 >

在SQL中选择所有子级的父记录

陆敏学
2023-03-14
问题内容

假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。

我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。

例如,假设我有:

  • List item
  • Parent Alice
  • Parent Bob
  • Child Charlie references Alice, Bob
  • Child David references Alice
  • Child Eve references Bob

我的目标是:

  • 如果我有儿童查理(Charlie Charlie),我希望结果集包括爱丽丝(Alice)和鲍勃(Bob)
  • 如果我有孩子查理和大卫,我希望结果集包括爱丽丝而 不是 鲍勃。
  • 如果我有孩子查理(Charlie),大卫(David)和夏娃(Eve),我希望结果集不包含任何人。

问题答案:

依靠数字技巧(其中父子链接的数量=子代的数量,该父代链接到所有子代):

SELECT Parent.ParentID, COUNT(*)
FROM Parent
INNER JOIN ChildParent
    ON ChildParent.ParentID = Parent.ParentID
INNER JOIN Child
    ON ChildParent.ChildID = Child.ChildID
WHERE <ChildFilterCriteria>
GROUP BY Parent.ParentID
HAVING COUNT(*) = (
    SELECT COUNT(Child.ChildID)
    FROM Child WHERE <ChildFilterCriteria>
)


 类似资料:
  • 问题内容: SQL开发人员,我有一个计划不周的数据库作为任务,以学习有关SQL Server 2012的很多知识。 所以,有表: 更新该行后,我需要检查element的父键,以不允许element自anny之类。 当我删除该行时,我需要删除所有孩子以及孩子的孩子,等等。 问题是: 如何选择DIST的一个元素的所有“父母+祖父母+等等”? 我如何选择DIST元素中的所有“儿子+孙子+等”? 我读过有

  • 问题内容: 我有一张桌子,桌子之间有一对多的关系。每个记录可以有来自同一张表的n个孩子。例如 给定一个ID,我想递归选择所有文件夹记录的SUM(SIZE)。目标数据库是MySql 5,但是如果它的通用性足以在Oracle和MS- SQL中运行,那将是很好的选择。 我不知道树有多深,可能是1级,可能是50级(或更多) 问题答案: 这可能会有些帮助:http : //mikehillyer.com/a

  • 我有以下html: 正如你所看到的那样。子列表div总是跟在带和一些文本的后面,就像div是h2的子列表一样(h2是子列表的标题)。另一个包含锚定标记。 我想得到div. sublist之前的所有h2标签。 这是我当前的xpath子句: 我最终得到了不同的元素(a、div、img),但h2元素。

  • 问题内容: 我不知道如何选择查询递归。 如何使用SqlServer取得这样的结果 问题答案: 您需要使用递归公用表表达式。 在线上有很多有用的文章。 有用的链接 简单谈谈:SQL Server CTE基础 blog.sqlauthority:递归CTE 这是您的问题的解决方案:

  • 我有以下JPA实体结构。 我想写一个JPA查询,它将返回给定parent_id的PARENT_NAME和所有子级的计数。 t我能想到的唯一解决办法是加入并编写一个复杂的条件查询。 我想不出使用简单的JPA查询获得结果的方法。 有更简单的方法吗?

  • 问题内容: 我正在寻找一个SQL查询来选择所有未由同一表上的另一个查询选择的记录。具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中一个记录以外的所有记录。 因此,一条select语句可能类似于以下内容(不起作用!): 如果不可能进行单个查询,那么最有效的解决方案是什么? 问题答案: 具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中