根据条件父子关系合并两个表的数据



我有两个表workorder和wotasks
脚本:创建表和数据插入脚本如下

CREATE TABLE workorder  (
wonum INT, siteid VARCHAR(5),reporteddate date
);
CREATE TABLE woTasks (
wonum INT, siteid VARCHAR(5),parent INT
);

INSERT INTO workorder   (wonum,siteid,reporteddate) 
values 
(5000503,'MCT','01-DEC-2018'),
(5000504,'MCT','01-DEC-2018'),
(5000505,'MCT','11-DEC-2018'),
(5000506,'MCT','01-MAR-2018'),
(5000507,'MCT','21-FEB-2018'),
(5000508,'MCT','01-MAY-2018');
select * from workorder;
INSERT INTO woTasks (wonum,siteid,parent) 
values 
(5000531,'MCT','5000503'),
(5000532,'MCT','5000503'),
(50005061,'MCT','5000506'),
(50005062,'MCT','5000506'),
(50005063,'MCT','5000506'),
(50005081,'MCT','5000508');
select * from woTasks;

我的要求是根据以下条件从这些表中获取数据
工作订单中的所有WONUM(其中报告日期>=2018年5月1日,报告日期<=2018年12月31日(+工作任务表中的所有子WONUM
结果应该是这样的

wonum
50005003  
5000531 
5000532
5000505   
5000506    
50005061   
50005063 
5000508    
50005081  
5000504    

请帮我写查询结果如上

您的wonum和父列的数据类型存在一些问题。如果我猜所有列都是char类型的ouf值,那么您可以使用UNIONALL逻辑来实现您想要的输出-

演示在这里

SELECT wonum FROM workorder
UNION ALL
SELECT B.wonum FROM workorder A
INNER JOIN woTasks B ON A.wonum = B.parent
WHERE reporteddate >= '1-May-2018'
AND reporteddate <= '31-DEC-2018'
ORDER BY 1

但是,如果您的所有值都是Number,只需在ORDERBY部分将它们转换为Char/String,即可按所示对结果进行排序。

最新更新