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的
其他的类推
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)
/
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
没用过,希望解释下!谢谢
FROM TBL_A A
WHERE A.CODEID IN (SELECT CODEID
FROM TBL_B B
WHERE B.CODEID = '001'
OR B.PARENTID = '001'
)
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的话用上面的查询