从Oracle中的Table1到Table2的INSERT期间的特定字段值的子查询?

时间:2015-04-14 21:49:13

标签: sql oracle insert subquery toad

我试图创建一个简短的脚本,它将获取Table1中的所有字段并将它们插入Table2。基本字段(col1,col2,col3等)我已经被这样的事情所覆盖:

INSERT INTO Table2 (col1, col2, col3, col4, col5, col6, col7)
             SELECT col1, col2, col3, col4, col5, SYSDATE, USER
FROM Table1

我很难插入2个字段的值,特别是Table2的col12/col13。这些列在Table1中是独立的,但在我的新Table2中,通过外键ID引用到Table3/Table4的值。我现在试图弄清楚如何在表格INSERT中将表格从表1中导入到表2中。

尝试更好地解释:

// Previously Used for DB
[Table1]
col12 -- CUSTOMER
col13 -- MERCHANT

//---------------
// NEW
[Table2]
col15 -- CUSTOMER_ID
col16 -- MERCHANT_ID

[Table3]
ID
CUSTOMER_DESC
CREATED_DATE
CREATED_BY

[Table4]
ID
MERCHANT_DESC
CREATED_DATE
CREATED_BY

任何人都可以在我的INSERT脚本中为这样的事情提供正确格式化的示例吗?我想象它是这样的:

INSERT INTO Table1 (col1, col2, col3, col4)
SELECT col1, col2, col3, [SELECT ID FROM Table3 WHERE Table3.CUSTOMER_DESC == Table2.CUSTOMER])
FROM Table2

如果解释不是最清楚,我道歉。

2 个答案:

答案 0 :(得分:4)

您需要正确JOINTable3Table4才能获得引用的字段值:

INSERT INTO Table2 (CUSTOMER_ID, MERCHANT_ID, col1, col2, etc...)
SELECT t3.ID, t4.ID, t1.col1, t2.col2, etc..
FROM Table1 t1 
INNER JOIN Table3 t3 ON t1.CUSTOMER = t3.CUSTOMER_DESC
INNER JOIN Table4 t4 ON t1.MERCHANT = t4.MERCHANT_DESC

上述查询应该没有问题,只要 Table1Table3字段CUSTOMER之间存在1-1关系,{{字段CUSTOMER_DESCTable1上的1}}和Table4以及MERCHANT

SQL Fiddle Demo

答案 1 :(得分:-1)

你几乎做对了。

INSERT INTO Table1 (col1, col2, col3, col12)
SELECT col1, col2, col3, (SELECT customer_desc FROM Table3 WHERE Table3.ID = Table2.col15)
FROM Table2