本想写清楚些,看来是写的太复杂了,简化以下。呵呵
一个主表对应两个从表,都是一对多:
一个查询结果是:
MATEID MATENAME MATEMODEL MATEUNIT PLANQTY0101000-000000b 铁1 1 吨 1025
0101000-000000c 铁1 3 吨 820
0501000-000000 水泥1 1 立方米 2050另一个查询结果是:
MATEID MATENAME MATEMODEL MATEUNIT FACTQTY0101000-000000b 铁1 1 吨 -500
0105000-000000a 铁4 a 吨 20怎样用联合查询出以下结果MATEID MATENAME MATEMODEL MATEUNIT PLANQTY FACTQTY
0101000-000000b 铁1 1 吨 1025 -500
0101000-000000c 铁1 3 吨 820 0
0105000-000000a 铁4 a 吨 0 20
0501000-000000 水泥1 1 立方米 2050 0oracle只有左连接或者右连接,不知怎样实现
一个主表对应两个从表,都是一对多:
一个查询结果是:
MATEID MATENAME MATEMODEL MATEUNIT PLANQTY0101000-000000b 铁1 1 吨 1025
0101000-000000c 铁1 3 吨 820
0501000-000000 水泥1 1 立方米 2050另一个查询结果是:
MATEID MATENAME MATEMODEL MATEUNIT FACTQTY0101000-000000b 铁1 1 吨 -500
0105000-000000a 铁4 a 吨 20怎样用联合查询出以下结果MATEID MATENAME MATEMODEL MATEUNIT PLANQTY FACTQTY
0101000-000000b 铁1 1 吨 1025 -500
0101000-000000c 铁1 3 吨 820 0
0105000-000000a 铁4 a 吨 0 20
0501000-000000 水泥1 1 立方米 2050 0oracle只有左连接或者右连接,不知怎样实现
where t1.mateid=t2.mateid(+)
union
select t2.mateid,t2.matename,t2.matemodel,0,t2.factqty
from t2
where not exists (select 'x' from t1 where t1.mateid=t2.mateid)
union: union all
16:17:13 jlanzpa817>drop table bb;表已丢弃。已用时间: 00: 00: 00.40
16:17:13 jlanzpa817>
16:17:13 jlanzpa817>create table aa
16:17:13 2 (MATEID varchar2(20),
16:17:13 3 MATENAME varchar2(10),
16:17:13 4 MATEMODEL varchar2(10),
16:17:13 5 MATEUNIT varchar2(10),
16:17:13 6 PLANQTY varchar2(10)
16:17:13 7 );表已创建。已用时间: 00: 00: 00.30
16:17:13 jlanzpa817>
16:17:14 jlanzpa817>insert into aa values ('0101000-000000b','铁1','1','吨','1025');
TABLE
TABLE已创建 1 行。已用时间: 00: 00: 00.01
16:17:14 jlanzpa817>insert into aa values ('0101000-000000c','铁1','3','吨','820');已创建 1 行。已用时间: 00: 00: 00.20
16:17:14 jlanzpa817>insert into aa values ('0501000-000000','水泥1','1','立方米','2050');已创建 1 行。已用时间: 00: 00: 00.10
16:17:14 jlanzpa817>commit;提交完成。已用时间: 00: 00: 00.20
16:17:14 jlanzpa817>
16:17:14 jlanzpa817>create table bb
16:17:14 2 (MATEID varchar2(20),
16:17:14 3 MATENAME varchar2(10),
16:17:14 4 MATEMODEL varchar2(10),
16:17:14 5 MATEUNIT varchar2(10),
16:17:14 6 FACTQTY varchar2(10)
16:17:14 7 );表已创建。已用时间: 00: 00: 00.30
16:17:14 jlanzpa817>insert into bb values ('0101000-000000b','铁1','1','吨','-500');已创建 1 行。已用时间: 00: 00: 00.10
16:17:15 jlanzpa817>insert into bb values ('0105000-000000a','铁4','a','吨','20');已创建 1 行。已用时间: 00: 00: 00.10
16:17:15 jlanzpa817>commit;提交完成。已用时间: 00: 00: 00.10
16:17:15 jlanzpa817>
16:17:15 jlanzpa817>
16:17:15 jlanzpa817>select aa.MATEID,aa.MATENAME,aa.MATEMODEL,aa.MATEUNIT,aa.PLANQTY,bb.FACTQTY
16:17:15 2 from aa,bb where aa.MATEID = bb.MATEID
16:17:15 3 union all
16:17:15 4 select aa.MATEID,aa.MATENAME,aa.MATEMODEL,aa.MATEUNIT,aa.PLANQTY,'0' FACTQTY
16:17:15 5 from aa,bb where aa.MATEID = bb.MATEID(+) and bb.MATEID is null
16:17:15 6 union all
16:17:15 7 select bb.MATEID,bb.MATENAME,bb.MATEMODEL,bb.MATEUNIT,'0' PLANQTY,bb.FACTQTY
16:17:15 8 from aa,bb where aa.MATEID(+) = bb.MATEID and aa.MATEID is null;MATEID MATENAME MATEMODEL MATEUNIT PLANQTY FACTQTY
-------------------- ---------- ---------- ---------- ---------- ----------
0101000-000000b 铁1 1 吨 1025 -500
0101000-000000c 铁1 3 吨 820 0
0501000-000000 水泥1 1 立方米 2050 0
0105000-000000a 铁4 a 吨 0 20已用时间: 00: 00: 00.20
16:17:15 jlanzpa817>
16:17:15 jlanzpa817>