我需要根据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
答案 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)。
准备好文件后,必须再次在新表中加载。