2010-10-28 4 views
2

J'ai une requêtelignes Insertion dans une table MySQL basé sur une requête

SELECT A.a, A.b, A.c 
FROM A 
LEFT JOIN X ON A.a = X.x 
WHERE X.x IS NULL 

qui trouve des entrées dans le tableau A, qui ont pas d'entrée correspondante dans le tableau X. Comment puis-je insérer les résultats de cette requête dans la table X? Si je devais seulement quelques entrées que je ferais

INSERT INTO X(xa, xb, xc) 
VALUES ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2') 

(En aparté: la colonne d est réglée sur auto_increment, est-ce que faire la bonne chose si je cours ce qui précède De même, les colonnes e, f,?. .., h ont des valeurs par défaut, je crois que celles-ci seront définies en conséquence.)

Cela ne serait pas difficile à faire en exportant, en écrivant des extraits SQL individuels pour chaque ligne dans Excel, et en les exécutant chacun; Je demande cela principalement pour mieux apprendre le SQL.

(Bien sûr, ma vraie table a beaucoup plus de champs et diverses complications, mais je pense que cette simplification suffit.)

Répondre

2
INSERT INTO X (xa, xb, xc) 
    SELECT A.a, A.b, A.c 
    FROM A 
LEFT JOIN X ON A.a = X.x 
    WHERE X.x IS NULL 
+0

+1: Battez-moi de 29 secondes! –

+0

Je ne crois pas que cela fonctionnera car le select fait référence à la table dans laquelle il est inséré. – Cfreak

+0

@Cfreak: 'X' n'est pas la même table –

0

Essayez ceci:

INSERT INTO X(xa, xb, xc) 
SELECT A.a, A.b, A.c 
    FROM A 
    LEFT JOIN X ON A.a = X.x 
WHERE X.x IS NULL 
0

Vous pouvez utiliser INSERT ... SELECT syntaxe. Mais vous devrez utiliser une table temporaire car vous ne pouvez pas insérer dans une table que vous joignez dans votre instruction select.

create temporary table Y like X; 
INSERT INTO Y (x,y,z) SELECT a,b,c FROM A LEFT JOIN X ON a=x; 
INSERT INTO X SELECT * FROM Y; 
Questions connexes