67 votes

MySQL Comment INSERER DANS une table avec une sous-requête SELECT retournant plusieurs lignes ?

MySQL Comment INSERER DANS une table avec une sous-requête SELECT retournant plusieurs lignes ?

  INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON d.id  = f.id
     ),

     (
      "Henry"
     ),
    );

I JE VEUX pour remplir la nouvelle table avec tous les résultats renvoyés par cette sous-requête. Comment puis-je le faire sans obtenir un ERREUR 1242 (21000) : Une sous-requête renvoie plus d'une ligne

128voto

Ryan Points 10831
INSERT INTO Results (People, names )
   SELECT d.id, 'Henry'
   FROM Names f
   JOIN People d ON d.id  = f.id

Combinez la chaîne statique Henry avec votre SELECT requête.

13voto

MiggityMac Points 439

Voici ce que j'ai trouvé qui fonctionne bien. C'est un peu long mais souvent des données supplémentaires doivent être mélangées.

Insérer plusieurs lignes dans le tableau 1 à partir du tableau 2 avec des valeurs. EXEMPLES :

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Vous pouvez insérer des valeurs codées en dur pour obtenir l'insertion de plusieurs lignes avec des données répétées :

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Notez que : "Valeur", "1900-01-01", "9999-12-31" se répétera sur toutes les lignes insérées.

9voto

triclosan Points 2814
  INSERT INTO Results
    (
     People,
     names,
    )
    SELECT d.id, 'Henry'
    FROM Names f
    JOIN People d ON d.id  = f.id

9voto

INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON (d.id  = f.id) limit 1
     ),

     (
      "Henry"
     ),
    );

2voto

Sveteek Points 96

La raison de cette erreur (la sous-requête renvoie plus d'une ligne) est que vous utilisez des parenthèses () . Regardez plus attentivement pour trouver la meilleure réponse. Il ne contient pas de paranthèses autour de la sous-requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X