Pouvez-vous INSERT SELECT plusieurs lignes sans exécuter select sur la même ligne à chaque fois ?
P粉304704653
P粉304704653 2023-09-07 11:31:14
0
1
477

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粉304704653
P粉304704653

répondre à tous(1)
P粉269847997

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal