2017-10-01 2 views
2

je dois sélectionner FirstName, LastName, deliver_date, order_id, TOTAL_PRICE à partir du tableau 1, tableau 2, tableau 3 selon id et order_id et mettre ceux dans le tableau 4.valeur Insérer de trois tables dans une table vide

Tableau 1

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

Tableau 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  

Tableau 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 

Tableau 4

FirstName, LastName, deliver_date, order_id, total_price 

J'essaie de le faire comme ceci:

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) 

Mais je reçois une erreur:

SQL0412N Plusieurs colonnes sont renvoyées d'un sous-requête est autorisé seulement une colonne. SQLSTATE = 42823

+0

Side note: S'il vous plaît cesser d'utiliser le "implicite join" (séparés par des virgules 'clause FROM'), et passer à spécifier explicitement' JOIN's, avec autant de conditions que pertinentes dans le 'ON'. –

Répondre

2

Lorsque vous utilisez la déclaration INSERT lors de la sélection des données à partir d'une autre table, vous devez omettez mot-cléVALUES.

Ainsi, il devrait être

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

Aussi, assurez-être que même nombre de colonnes avec la même dans la même séquence, sinon, vous serez insérez des valeurs erronées ou votre requête jetterez erreur due à désadaptation Type de données.

+0

@QuaziTarik vous devez marquer la réponse acceptée – Ravi

+0

comment marquer ma question. nouveau ici @Ravi bro –

+0

@QuaziTarik s'il vous plaît lire https://meta.stackexchange.com/a/5235.Vous pouvez également voir la flèche vers le haut. vous devez cliquer dessus pour upvote. – Ravi

-1

Vous avez l'erreur « ... VALUES (SELECT CUSTOMER.CUST_FNAME ... » dans la première colonne à insérer, peut-être cette sous-requête a plus de 1 rang.

Vous devez ajuster cette requête pour renvoyer 1 ligne seulement (plus de filtres).

Quoi qu'il en soit une autre forme pour sauvegarder vos valeurs à une autre nouvelle table, est exactement le choix des colonnes de votre nouvelle table et enregistrer cette requête dans un fichier .csv.

Exemple:

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

    .... 
); 

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

- cette requête vous devez enregistrer dans un fichier csv (si votre moteur de base de données est autorisé à enregistrer dans csv). Une fois le fichier prêt, vous devez le charger à nouveau dans la nouvelle table.

0

essayez ceci:

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