【问题标题】:SQL get all parent / children joined rows if any child passes conditional如果任何孩子通过条件,SQL 将获取所有父/子加入的行
【发布时间】:2020-07-29 17:53:11
【问题描述】:

如果任何特定子节点符合一组标准,我想选择一个父节点及其所有子节点。这可以通过单个查询实现吗?

使用两个查询,它看起来像这样:

SELECT p_id INTO target 
FROM parent, children 
WHERE parent.p_id = children.p_id and children.data1 = 'blah';

SELECT * 
FROM parent 
JOIN children ON parent.p_id = children.p_id and children.p_id = target; 
      

.

p_id    name
1       Perice
2       Siward
3       Scottie

c_id    p_id    name
1          1    Arda
2          1    Katrinka
3          2    Gladi
4          3    Hedi
5          3    Didi
6          3    Lorry

如果谓词是 Lorry 的子名称匹配,则结果集将包含

p_id c_id p_name    c_name
3    4    Scottie   Hedi
3    5    Scottie   Didi
3    6    Scottie   Lorry

【问题讨论】:

  • 你在使用 ORM(例如 EF 或 hibernate)吗?
  • 不,我是在mysql里写程序。
  • 这能回答你的问题吗? Multiple SQL query in C#
  • 远程也不行。
  • 能否提供样本数据?

标签: mysql hierarchical-data


【解决方案1】:
SELECT parent.*, children.*
FROM parent
INNER JOIN children ON parent.p_id = children.p_id and children.data1 = 'blah';

评论后编辑:

SELECT parent*
FROM parent
WHERE parent.p_id IN (selet children.p_id 
                       FROM childeren 
                       WHERE children.p_id=parent.p_id and chidren.data1='blah')

【讨论】:

  • 这只会选择一个孩子
  • 您应该添加一些示例数据 + 所需的输出...
猜你喜欢
  • 2016-12-24
  • 2018-07-02
  • 1970-01-01
  • 2018-01-29
  • 2021-12-02
  • 1970-01-01
  • 2021-08-19
  • 2021-02-25
  • 1970-01-01
相关资源
最近更新 更多