Maison > Questions et réponses > le corps du texte
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粉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