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

如何构造SQL查询以查找作为其他两个特定对象的父对象的对象?

苍烨然
2023-03-14
问题内容

假设我有2张桌子,分别称为父母和孩子。父母可以有零个到多个孩子,而一个孩子可以有1个到很多父母。如何找到作为两个特定孩子的父母的所有父母元素。

例如,假设我有父母[p_a,p_b,p_c,p_d]和孩子:[c_a,c_b]他们的结构如下:

  • p_a的孩子为c_a
  • p_b将c_b作为孩子
  • p_c将c_a和c_b都作为子代
  • p_d没有孩子

如何制定查询以选择p_c?

如果它们的结构中p具有[id,name],而c具有[id,name],并且存在一个带有[parent_id,child_id]的join_table。(在此示例中,我还给了他们顺序ID以使事情变得更容易)。

我尝试解决此问题的方法是使用以下SQL

SELECT p.*
FROM parent AS p
JOIN join_table AS j ON p.id = j.parent_id
JOIN children AS c ON j.child_id = c.id
WHERE c = 1
  OR c = 2

但这显然会选择p_a和p_b以及p_c。我一直在寻找UNION运算符,但似乎无法使其正常运行。

期待您的回答,感谢您的阅读。麦克风

编辑:提到我用于示例的id约定


问题答案:

替代已接受答案的方法,可能更快:

SELECT p.*
FROM parent p JOIN join_table j ON p.id=j.parent_id
WHERE j.child_id=1 OR j.child_id=2
GROUP BY j.parent_id
HAVING COUNT(j.child_id)=2;


 类似资料:
  • 问题内容: 他(@Mack)使用T-SQL和DMV完成了类似的回答。 如果可能的话,这可能吗? 我会将其发布为评论,但是我还没有足够的声誉… 问题答案: 您可以但不使用DMV,但需要一个相关的动态管理 功能 (DMF) 这是代码: 这是指向DMV和DMF的MSDN页面的链接。

  • 我有: 我有一组老师: 我想找到与该查询集中每个教师相关的所有学生,我需要将结果按教师分组。比如: 我可以通过在queryset中的每个对象上循环,并根据外传给该教师的学生筛选学生来实现这一点,但这似乎非常缓慢,需要对每个对象进行额外的DB调用。在理想情况下,在只使用Python而不使用SQL的情况下,是否有任何方法可以通过一个或几个DB调用来实现这一点?

  • 我有https://github.com/javers/javers/issues/98中描述的类似用例。 在下面的代码中,当我更新dependent对象并提交Employee bob时,我希望对dependent的更改从JQL query 完整代码: 我得到以下输出。这缺少从属名称更改(Ram到Ramsey)。 谢谢

  • 我在这里做错了什么?

  • 问题内容: 我有以下JS对象: 我需要在上述对象上执行此SQL查询: 结果应为: 因为只有该组包含在查询中使用的两个ID。 我找到了有关SQLike和JSLINQ的信息,但是我 在哪里 以及 有 表达式时遇到了问题。是否有可能使用SQL-JS库或JS / jQuery本身(编写函数等)在javascript对象上执行此类查询? 问题答案: Alasql JavaScript SQL库是专门为此类任

  • Navicat 还能让你管理其他 SQLite 对象:索引和触发器。在主窗口的主工具栏点击相应的按钮来打开对象列表。