从SQL查询中的其他表值检索子对象记录
在服务\u行\u表中,结构列上的行\u为“TRUE”,然后检索所有子记录。如果不是,则只需重试服务行的对象记录 预期结果表如附图所示 这是我尝试过的查询,但不起作用从SQL查询中的其他表值检索子对象记录,sql,oracle,Sql,Oracle,在服务\u行\u表中,结构列上的行\u为“TRUE”,然后检索所有子记录。如果不是,则只需重试服务行的对象记录 预期结果表如附图所示 这是我尝试过的查询,但不起作用 SELECT S.contract_id, S.contract_name, L.line_id, O.object_id FROM Service_Line L, Service_Contract S, Object O WHERE ( L.contract_id = S.contract_id AND O.object_id =
SELECT S.contract_id, S.contract_name, L.line_id, O.object_id
FROM Service_Line L, Service_Contract S, Object O
WHERE ( L.contract_id = S.contract_id AND O.object_id = L.object_id ) AND
( ( L.line_on_structure = 'True' AND O.object_id IN ( SELECT object_id
FROM Object O
START WITH O.object_id = L.object_id
CONNECT BY PRIOR O.object_id = O.belongs_to_object AND
O.contract = O.belongs_to_site ) ) OR
( L.line_on_structure = 'False' AND O.object_id IN (
SELECT object_id
FROM Object O
WHERE O.object_id = L.object_id) ) )
您可以使用
递归CTE
而不是查询来实现这一点
WITH mycte(object_id,parent_object_id,line_name,line_id,contract_id,name)
AS (
SELECT o.object_id,o.parent_object_id,s.line_name,s.line_id,s.contract_id,c.name
FROM ServiceLine s join object o on s.object_id = o.object_id
join contract c on c.contract_id=s.contract_id
WHERE s.Line_on_structure = 'TRUE' and o.parent_object_id IS NULL
UNION ALL
SELECT o.object_id,o.parent_object_id,m.line_name,m.line_id,m.contract_id,m.name
FROM mycte m
JOIN object o
ON m.object_id = o.parent_object_id )
SELECT CONTRACT_ID,NAME,LINE_ID,LINE_NAME,OBJECT_ID
FROM mycte m
UNION ALL
SELECT s.contract_id,c.name,s.line_id,s.line_name,o.object_id
FROM ServiceLine s join object o on s.object_id = o.object_id
join contract c on c.contract_id=s.contract_id
WHERE s.Line_on_structure = 'FALSE' and o.parent_object_id IS NULL
输出:
+------------+--------------+---------+-----------+-----------+
| CONTRACT_ID| NAME | LINE_ID | LINE_NAME | OBJECT_ID |
+------------+--------------+---------+-----------+-----------+
| 100001 | ABC_CONTRACT | 0001 | XYZ | OBJ1 |
| 100001 | ABC_CONTRACT | 0001 | XYZ | OBJ2 |
| 100001 | ABC_CONTRACT | 0001 | XYZ | OBJ3 |
| 100001 | ABC_CONTRACT | 0001 | XYZ | OBJ4 |
| 100001 | ABC_CONTRACT | 0001 | XYZ | OBJ5 |
| 100001 | ABC_CONTRACT | 0002 | DFS | AAA1 |
+------------+--------------+---------+-----------+-----------+
您是否尝试编写查询,如果是,请将其发布。不要将架构和示例数据作为图像发布。使用
CREATE TABLE
和INSERT-INTO
语句。