2017-09-21 4 views
0

Comment insérer les entrées dans la table foo seulement le comm_id de la table waldo tandis que les autres colonnes (gérées, le statut et le type) sont ajoutés dans les valeurs statiques?psql - Insertion des entrées dans une table d'une autre table

TABLE foo

 comm_id  | managed | status | type | 
-----------------+---------------+--------------+------+ 
    COMM_11.21.6 |  true  |  NULL  | NULL | 
    COMM_14.15.7 |  true  |  NULL  | NULL | 
    COMM_13.03.9 |  true  |  NULL  | NULL | 

TABLEAU Waldo

 comm_id  | address | stat_id | 
-----------------+---------------+-----------+ 
    COMM_10.10.6 |  12345  |  1  | 
    COMM_14.15.7 |  78543  |  2  | 

sortie désiré pour TABLE foo

 comm_id  | managed | status | type | 
-----------------+---------------+--------------+------+ 
    COMM_11.21.6 |  true  |  NULL  | NULL | 
    COMM_14.15.7 |  true  |  NULL  | NULL | 
    COMM_13.03.9 |  true  |  NULL  | NULL | 
    COMM_10.10.6 |  true  |  NULL  | NULL | 

la valeurs gérées = true, status = NULL et type = NULL est statique, donc je veux juste les ajouter par valeur. Et COMM_14.15.7 n'est pas ajouté à foo car l'ID existe déjà là.

INSERT INTO foo (comm_id, managed, status, type) VALUES ('id from waldo', 'true', 'NULL', 'NULL'); 

La requête ci-dessus insère des valeurs statiques dans la table.

INSERT INTO foo SELECT comm_id FROM waldo WHERE comm_id NOT IN (SELECT comm_id FROM foo); 

Est-il possible de manipuler ou de combiner ces requêtes afin que je puisse obtenir toutes les comm_id de waldo dans foo et mettre des valeurs statiques en même temps? Vos suggestions et idées sont très appréciées.

Répondre

1

est-il

INSERT INTO foo (comm_id, managed, status, type) 
select comm_id , true, NULL, NULL 
from waldo 
WHERE comm_id NOT IN (SELECT comm_id FROM foo); 

note que j'omettais entre guillemets booléenne vrai et nulls, qui est seulement une supposition ne connaissant pas la structure de foo

+0

Oui. Cela renvoie exactement la sortie que je désire. Je vous remercie! – Junior

0

Essayez ceci:

INSERT INTO foo (com_id,managed,status,type) 
select comm_id,'true',NULL,NULL from 
(
SELECT comm_id FROM waldo 
minus 
SELECT comm_id FROM foo 
);