数据查询的问题
oracle的查询
表A:
codeId 数量1 数量2 数量3
001 100 200 300
002 200 300 400
003 100 500 200
表B:
codeID parentid
001
002 001
003 001
004 002
意思大概是这样
表B是一个父子的对应表
如果parentid为空则为根
表A中放的codeid和表B是对应起来的
现在要求:
要查询
001下面所有的表B的数据总和[数据和为数量1+数量2+数量3]
其他当然包括表B中codeid为002/003的,因为这些都是属于001的
其他的类推
------解决方案--------------------范例:
CREATE TABLE TBL_B(CODEID VARCHAR2(3), PARENTID VARCHAR2(3));
INSERT INTO TBL_B
SELECT '001 ',NULL FROM DUAL UNION ALL
SELECT '002 ', '001 ' FROM DUAL UNION ALL
SELECT '003 ' , '001 ' FROM DUAL UNION ALL
SELECT '004 ' , '002 ' FROM DUAL;
CREATE TABLE TBL_A(CODEID VARCHAR2(3), NUM1 INT, NUM2 INT, NUM3 INT);
INSERT INTO TBL_A
SELECT '001 ', 100, 200 ,300 FROM DUAL UNION ALL
SELECT '002 ', 200 , 300 , 400 FROM DUAL UNION ALL
SELECT '003 ', 100 ,500, 200 FROM DUAL;
SELECT SUM(NUM1+NUM2+NUM3)
FROM TBL_A
WHERE EXISTS(
SELECT 1 FROM TBL_B
WHERE CODEID = TBL_A.CODEID
START WITH PARENTID IS NULL
CONNECT BY PRIOR CODEID = PARENTID)
/
------解决方案--------------------select sum(a.数量1+a.数量2+a.数量3) from a
where exists(
select b.codeID from b
where a.codeID=b.parentid
and b.parentid= '001 '
or
(b.codeID= '001 ' and b.parentid is null)
)
没测试.对于楼上的START WITH PARENTID IS NULL CONNECT BY PRIOR CODEID = PARENTID
没用过,希望解释下!谢谢
------解决方案--------------------SELECT SUM(NUM1+ NUM2 + NUM3)
FROM TBL_A A
WHERE A.CODEID IN (SELECT CODEID
FROM TBL_B B
WHERE B.CODEID = '001 '
OR B.PARENTID = '001 '
)
------解决方案--------------------既然004屬于002,002屬于001,那004為什么不屬于001?
------解决方案--------------------SELECT SUM(NUM1+NUM2+NUM3)
FROM TBL_A
WHERE EXISTS(
SELECT 1 FROM TBL_B
WHERE CODEID = TBL_A.CODEID
START WITH CODEID = '001 '
CONNECT BY PRIOR CODEID = PARENTID)
如果004 也属于001的话用上面的查询