首页 > 解决方案 > 带有子表的 SQL 查询

问题描述

我有两张表父母和孩子。

父表具有以下列

Parent_id,姓名

子表具有以下列

parent_id(外键),Identifier,identifier_value

现在我想列出不同的 parent_id,其名称和 identifier_value(of child table) 对于 Identifier = "test" 具有相同的 identifier_value 但对于 Identifier = "test1" 具有不同的 identifier_value

即考虑一个例子

父表---

Parent_id, Name
1, XYZ
2, PQR

子表

Parent_id, Identifier, Identifier_value
1, test, value1
1, test1, ghght 
2, test, value1
2, test1, khkhgj

输出应该是

1, XYZ, value1, ghght
2, PQR, value1, khkhgj

它应该返回上面示例的结果,如 parent_id 1 和 2,test 具有相同的值,但 test1 具有不同的值

这是我写到现在的

SELECT p.parent_id,
  p.name,
  eid.identifier_value,
  eid2.identifier_value
FROM parent p,
  child eid,
  child eid2
WHERE e.parent_id             = eid.parent_id
AND e.parent_id               = eid2.parent_id
AND eid.identifier  = 'test'
AND eid2.identifier = 'test1'
AND EXISTS
  (SELECT 1
  FROM child eid3
  WHERE eid3.identifier = 'test'
  AND eid3.value                    =eid.value
  AND eid3.parent_id             <> eid.parent_id
  AND EXISTS
    (SELECT 1
    FROM child eid4
    WHERE eid4.parent_id         = eid3.parent_id
    AND eid4.identifier = 'test1'
    AND eid3.value                 <> eid4.value
    AND eid4.identifier = eid3.identifier
    )
  )

最后一个子查询中的问题。需要一些建议。

标签: sqloracle

解决方案


这是你想要的?

select p.*, c1.Identifier_value, c2.Identifier_value
from parent p left join
     child c1
     on c1.parent_id = p.id and c1.identifier = 'test' left join
     child c2
     on c2.parent_id = p.id and c2.identifier = 'test2'
where c1.Identifier_value <> c2.Identifier_value;

推荐阅读