Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何插入通过子查询连接两个表的记录_Sql_Oracle_Sql Insert - Fatal编程技术网

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,您能在我的查询中输入截止日期吗?我会看看它是否有效