MySQL Comment INSERT INTO dans une table avec une sous-requête SELECT renvoyant plusieurs lignes?
INSERT INTO Results
(
People,
names,
)
VALUES
(
(
SELECT d.id
FROM Names f
JOIN People d ON d.id = f.id
),
(
"Henry"
),
);
JeVEUXpeupler la nouvelle table avec tous les résultats renvoyés par cette sous-requête. Comment puis-je faire cela sans obtenir ERREUR 1242 (21000): La sous-requête renvoie plus d'une ligne
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 requête SELECT
.
INSERT INTO Results
(
People,
names,
)
VALUES
(
(
SELECT d.id
FROM Names f
JOIN People d ON (d.id = f.id) limit 1
),
(
"Henry"
),
);
Voici ce que j'ai trouvé qui fonctionne bien. Il est un peu long, mais il est souvent nécessaire de mélanger des données supplémentaires.
Insérez plusieurs lignes dans table1 à partir de table2 avec les 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 insérer plusieurs lignes avec des données de répétition:
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" sera répété sur toutes les lignes insérées.
INSERT INTO Results
(
People,
names,
)
SELECT d.id, 'Henry'
FROM Names f
JOIN People d ON d.id = f.id
La raison de cette erreur (la sous-requête renvoie plus d'une ligne) est que vous utilisez des parenthèses () . Regarde plus attention à la meilleure réponse. Il ne contient pas de paréthèse autour de la sous-requête
Dans MySql, plusieurs valeurs de chaînes peuvent être insérées, comme ceci, en évitant les doublons. Merci.
insert into brand(name) select * from (
select 'Fender' as name
union select 'a'
union ..... ) t
where not exists (select 1 from brand t2 where t2.name COLLATE latin1_general_ci = t.name COLLATE utf8mb4_unicode_ci )