将三个表中的值插入空表中

时间:2017-10-01 18:01:50

标签: sql db2

我需要根据id和order_id从表1,表2,表3中选择FirstName,LastName,deliver_date,order_id,total_price并将它们放入表4中。

表1

id   FirstName   LastName   
-------------------------
1    mr.xxxx     xxx   
2    mr.ssss     sss   
3    mr.yyyy     yyy

表2

order_id  deliver_date  id  tracking_number   
----------------------------------------------
    01    10/01/2017     1         1   
    02    10/01/2017     2         2   
    03    10/01/2017     3         3    

表3

order_id   total_price      item qty   
-----------------------------------------------
   01      some price xx    some quantity xx   
   02      some price xx    some quantity xx   
   03      some price xx    some quantity xx  

表4

FirstName, LastName, deliver_date, order_id, total_price

我尝试这样做:

INSERT INTO RECEIPT (CUST_FNAME, CUST_LNAME, CUST_EMAIL, CUST_MOBILE, CUST_ADDRESS, CUST_CITY, CUST_STATE, CUST_POSTCODE, DELIVERY_DATE, TOTAL_PRICE, CUST_ID, ORDER_ID) 
VALUES (SELECT CUSTOMER.CUST_FNAME, CUSTOMER.CUST_LNAME, CUSTOMER.CUST_EMAIL, CUSTOMER.CUST_MOBILE, CUSTOMER.CUST_ADDRESS, CUSTOMER.CUST_CITY, CUSTOMER.CUST_STATE, CUSTOMER.CUST_POSTCODE , ORDERS.DELIVERY_DATE, "ORDER DETAIL".TOTAL_PRICE, ORDERS.CUST_ID, ORDERS.ORDER_ID FROM CUSTOMER, ORDERS, "ORDER DETAIL" WHERE CUSTOMER.CUST_ID = ORDERS.CUST_ID AND ORDERS.ORDER_ID = "ORDER DETAIL".ORDER_ID)

但是我收到了一个错误:

  

SQL0412N从只允许一列的子查询返回多个列。 SQLSTATE = 42823

3 个答案:

答案 0 :(得分:3)

在从其他表格中选择数据时使用INSERT语句时,您需要 省略 VALUES关键字。

所以,它应该是

   INSERT INTO <TABLE_NAME>(col1, col2...)
     SELECT col1, col2...

此外,请确保在相同的序列中具有相同数量的列,否则,您将插入错误的值,否则您的查询将因错误匹配数据类型而引发错误。

答案 1 :(得分:0)

试试这个:

insert into table4 (FirstName, LastName, deliver_date, order_id, total_price)
select f1.FirstName, f1.LastName, f2.deliver_date, f2.order_id, f3.total_price 
from table1 f1
inner join table2 f2 on f1.id=f2.id 
inner join table3 f3 on f2.order_id=f3.order_id

答案 2 :(得分:-1)

您要插入的第一列中的“... VALUES( SELECT CUSTOMER.CUST_FNAME ,...”)中有错误,可能此子查询的行数超过1行。

您必须调整此查询才能返回1行(更多过滤器)。

无论如何,将您的值备份到另一个新表的其他形式是从新表中精确选择列并将此查询保存到.csv文件中。

示例:

CREATE TABLE new_table
(
    id SERIAL NOT NULL,
    FirstName VARCHAR,
    LastName VARCHAR

   ....
);

SELECT table1.FirstName, table2.LastName, ...  
FROM table1 
INNER JOIN ....

- 此查询必须保存到csv文件中(如果允许您的数据库引擎保存到csv)。

准备好文件后,必须再次在新表中加载。