recherche

Maison  >  Questions et réponses  >  le corps du texte

Pouvez-vous INSERT SELECT plusieurs lignes sans exécuter select sur la même ligne à chaque fois ?

Si j'ai une table et que j'ai besoin d'une valeur d'une autre valeur et que les autres valeurs viennent d'ailleurs, dois-je exécuter la sélection à chaque fois ?

INSERT INTO table1 (name, otherValue) VALUES 
(SELECT name FROM table2 WHERE id = 1, outsideValue1),
(SELECT name FROM table2 WHERE id = 1, outsideValue2),
(SELECT name FROM table2 WHERE id = 1, outsideValue3);

Donc, le nom est le même et otherValue est différent à chaque fois que j'essaie d'insérer par lots.

P粉304704653P粉304704653567 Il y a quelques jours533

répondre à tous(1)je répondrai

  • P粉269847997

    P粉2698479972023-09-08 00:08:10

    Une solution consiste à placer les "autres valeurs" dans une table dérivée pour effectuer une jointure croisée avec un enregistrement source unique :

    INSERT INTO table1 (name, otherValue)
    SELECT t2.name, v.val
    FROM table2 t2
    CROSS JOIN (
        SELECT 'val1' as val
        UNION ALL SELECT 'val2'
        UNION ALL SELECT 'val3'
    ) v
    WHERE t2.id = 1

    Dans MySQL 8.0.19 et supérieur, nous pouvons utiliser la syntaxe VALUES/ROW :

    INSERT INTO table1 (name, otherValue)
    SELECT t2.name, v.val
    FROM table2 t2
    CROSS JOIN (VALUES 
        ROW('val1'),
        ROW('val2'),
        ROW('val3')
    ) v(val)
    WHERE t2.id = 1

    répondre
    0
  • Annulerrépondre