Sql 如何插入通过子查询连接两个表的记录
您好,我正在尝试插入一些记录,通过子查询连接两个表。我将非常感谢您的帮助。谢谢 质疑Sql 如何插入通过子查询连接两个表的记录,sql,oracle,sql-insert,Sql,Oracle,Sql Insert,您好,我正在尝试插入一些记录,通过子查询连接两个表。我将非常感谢您的帮助。谢谢 质疑 insert into rtn_det select * from tmp_rtn_det where rtn_no in(select a.rtn_no from rtn_det a,rtn_mas b where a.rtn_no=b.rtn_no and a.sc_cd=b.sc_cd and fl_mvh = '2' and rtn_dt between '01-MAY-15' and '31-MAY-
insert into rtn_det select * from tmp_rtn_det
where rtn_no in(select a.rtn_no from rtn_det a,rtn_mas b
where a.rtn_no=b.rtn_no
and a.sc_cd=b.sc_cd
and fl_mvh = '2'
and rtn_dt between '01-MAY-15' and '31-MAY-15'
and b.sc_cd='05')
and sc_cd='05'
表:
SQL> desc rtn_mas
Name Null? Type
------------------------------- -------- ----
RTN_NO NOT NULL VARCHAR2(6)
SC_CD NOT NULL VARCHAR2(2)
RTN_DT DATE
RSN_NO VARCHAR2(1)
BILL_NO VARCHAR2(6)
FP_ID VARCHAR2(4)
SALE_CD NOT NULL VARCHAR2(2)
RTN_GR NOT NULL NUMBER(9,2)
RTN_NET NOT NULL NUMBER(9,2)
FL_MVH VARCHAR2(1)
USER_CD VARCHAR2(2)
W_DT DATE
CANCL VARCHAR2(1)
R_VAT NUMBER(9,2)
SQL>
SQL>
SQL> desc rtn_det
Name Null? Type
------------------------------- -------- ----
RTN_NO NOT NULL VARCHAR2(6)
SC_CD NOT NULL VARCHAR2(2)
TYP_CD NOT NULL VARCHAR2(2)
CAT_CD NOT NULL VARCHAR2(2)
PRD_CD NOT NULL VARCHAR2(4)
RTN_QTY NOT NULL NUMBER(7,2)
RTN_GR NOT NULL NUMBER(9,2)
RTN_NET NOT NULL NUMBER(9,2)
RVAT_AMT NUMBER(8,2)
RTN_MAS和RTN_DET是我试图加入的两个表,我还使用了一个子查询。请告诉我我做错了什么
两个表中的部分数据:
select * from rtn_det
2 where rownum < 10
3 /
RTN_NO SC TY CA PRD_ RTN_QTY RTN_GR RTN_NET RVAT_AMT**
------ -- -- -- ---- --------- --------- --------- ---------
19026 02 09 01 1009 3 291 283.53
19027 02 09 05 1008 10 348 342.1
18347 02 09 08 1038 1 33 32.72
18347 02 09 08 1050 1 65 64.44'
SQL> select * from rtn_mas
2 where rownum<10
3 /
RTN_NO SC RTN_DT R BILL_N FP_I SA RTN_GR RTN_NET F US W_DT C R_VAT
------ -- --------- - ------ ---- -- --------- --------- - -- --------- - ---------
158699 10 27-JAN-13 7 863843 2DX6 WM 430.48 419.47 1 62 26-JAN-13 62.5
158700 10 27-JAN-13 7 863843 5498 WM 752.44 732.69 1 62 26-JAN-13 94
158702 10 27-JAN-13 7 868675 2Q91 RC 317.88 315.18 1 62 26-JAN-13 46.26
158703 10 27-JAN-13 7 867416 2Q91 WO 1356.58 1324.2 1 62 26-JAN-13 196.96
158704 10 27-JAN-13 7 867416 5847 WO 1427 1402.62 1 62 26-JAN-13 208
158706 10 27-JAN-13 7 869481 2Q91 WO 808.48 794.28 1 62 26-JAN-13 102.24
问候,,
首先,内部查询是否返回任何行
select a.rtn_no
from rtn_det a,rtn_mas b
where a.rtn_no=b.rtn_no
and a.sc_cd=b.sc_cd
and fl_mvh = '2'
and rtn_dt between '01-MAY-15' and '31-MAY-15'
and b.sc_cd='05'
而且,通常最好先按日期过滤数据,至少在SQL中是这样。将where子句放在第一位允许使用日期索引,这通常会大大减少行数
没有数据很难判断,但是这个查询是否可以取代内部查询
SELECT DISTINCT a.rtn_no
FROM rtn_det a
INNER JOIN rtn_mas b
ON a.rtn_no=b.rtn_no AND a.sc_cd=b.sc_cd
WHERE rtn_dt BETWEEN '01-MAY-15' AND '31-MAY-15'
AND fl_mvh = '2'
AND b.sc_cd='05'
你的错误是什么?b.sc_cd='05此处的“同样缺少”看起来像是输入错误。您的查询有什么问题?您需要在比较的日期字符串周围添加日期。是的,看到错误会很有用。@maheswaran,它说创建了0行。我更正了您指出的错误,但错误是此查询未插入任何数据。@davegreen,您能在我的查询中输入截止日期吗?我会看看它是否有效