1

我有父/子表:

父表:

编号 | 描述

1 | 亚历山德拉 2 | 娜塔莉亚

子表:

编号 | id_parent | 描述

1 | 1 | 程序员2 | 1 | 手术 3 | 2 | 程序员4 | 2 | 它

如何根据过滤器返回记录集,例如,如果我们想使用“程序员”获取所有记录,我们希望设置:

响应表:

id_parent | id_child | 描述(来自孩子)

1     |    1     |  Programmer
2     |    3     |  Programmer

但是如果过滤器看起来像:“程序员”和“手术”,查询必须只返回:

响应表:

id_parent | id_child | 描述(来自孩子)

1     |    1     |  Programmer
1     |    2     |  Surgery

如您所见,我还需要某种“加入”来“连接”子表中的描述和代码。

提前致谢。

4

3 回答 3

1
SELECT t.id_parent,
       t.id,
       t.description
  FROM CHILD t
  JOIN CHILD p ON p.id_parent = t.id_parent AND p.description = 'Programmer'
  JOIN CHILD s ON s.id_parent = t.id_parent AND s.description = 'Surgery'

根据您的 SQL,您需要使用:

  SELECT p.ID, 
         c.ID, 
         c.ID_SpecMatrix 
    FROM Parent p
    JOIN Child c ON p.ID = c.ID_Parent AND c.ID_SpecMatrix = 4
    JOIN Child c2 ON p.ID = c2.ID_Parent AND c2.ID_SpecMatrix = 5
GROUP BY p.ID, 
         c.ID, 
         c.ID_SpecMatrix 

关键是加入 CHILD 表的其他副本。to ID将ID_parent记录链接在一起;AND 筛选 CHILD 表的副本以仅包含ID_SpecMatrix与您的条件匹配的行。

查询需要使用动态 SQL 才能扩展到您想要使用的许多条件。

于 2009-08-11T15:53:22.287 回答
0

select * from parent p left join child c on p.id = c.id_parent where c.description = 'Programmer' or c.description = 'Surgen'

于 2009-08-11T07:08:33.487 回答
0

这个怎么样

SELECT * FROM Child
WHERE id_specmatrix IN (4,5) AND
      Parent_ID IN (SELECT DISTINCT parent.id FROM parent p
                    JOIN Child s1 ON s1.id_parent = p.id AND s1.id_specmatrix = 4
                    JOIN Child s2 ON s2.id_parent = p.id AND s2.id_specmatrix = 5)
于 2009-08-12T05:16:56.513 回答