2009-11-18 4 views
4

Je migrais un champ vers une nouvelle table. La nouvelle table a trois champs. Ce que j'ai essayé étaitInsertion d'un résultat GROUP BY dans une autre table

INSERT INTO foo VALUES ('', (SELECT bar FROM baz GROUP BY bar), ''); 

Cela a entraîné une erreur due à plusieurs lignes résultant de la sélection.

Quelle est la bonne façon de procéder?

Répondre

15

Si je comprends bien, vous voulez quelque chose comme:

INSERT INTO foo (col1name, col2name, col3name) 
    SELECT '', bar, '' 
    FROM baz 
    GROUP BY bar 
4

Vous pouvez essayer:

INSERT INTO foo 
SELECT '',bar,'' FROM baz GROUP BY bar 
4
INSERT INTO foo (fieldName1,fieldName2,fieldName3) 
    SELECT '',bar,'' FROM baz GROUP BY bar 
4

Voulez-vous profiter de la réponse de Michael, une autre possibilité serait

INSERT INTO foo (col2name) SELECT bar FROM baz GROUP BY bar 

où col1 et col3 sont d défini pour avoir une valeur par défaut de la chaîne vide.

6

Ou si je vous comprends correctement et que vous voulez une entrée dans la nouvelle table pour chaque valeur de barre distincte dans l'ancienne table, je pense que cela rend un peu plus clair.

INSERT INTO foo (col2name) SELECT DISTINCT bar FROM baz 

Le plan d'exécution et la performance devrait être similaire

+0

+1 pour l'optimisation manuelle réussie! –

+0

Solution soignée et élégante – zeeshan