J'essaie d'exécuter une instruction SQL très simple dans Oracle 11g.
insert into table1 (col1, col2) values (select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2);
Requête très simple. Cartésien joint l'ancienne table 1 à l'ancienne table 2, place les valeurs obtenues dans la table 1.
J'ai exécuté la sous-requête par elle-même et cela fonctionne parfaitement.
select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2
Lorsque j'essaie d'exécuter l'instruction complète, le message d'erreur suivant s'affiche:
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
Je ne peux pas le faire fonctionner dans MySql non plus. Quelque chose ne va pas dans ma déclaration, mais je ne suis pas sûr de ce que c'est.
Votre requête devrait être:
insert into table1 (col1, col2)
select t1.col1, t2.col2
from oldtable1 t1, oldtable2 t2
C'est à dire. sans la partie VALUES
.
Débarrassez-vous du mot-clé values
et des mots clés. Vous pouvez voir un exemple ici .
Ceci est la syntaxe de base INSERT:
INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...);
Voici la syntaxe INSERT SELECT:
INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2";
Vous n'avez pas besoin de la clause 'values' lorsque vous utilisez un 'select' comme source.
insert into table1 (col1, col2)
select t1.col1, t2.col2 from oldtable1 t1, oldtable2 t2;
pour l'insertion de données dans la table, vous pouvez écrire
insert into tablename values(column_name1,column_name2,column_name3);
mais écris le column_name
dans la séquence selon la séquence dans le tableau ...
Il existe une autre option pour insérer des données dans un tableau.
insert into tablename values(&column_name1,&column_name2,&column_name3);
cela ouvrira une autre fenêtre pour insérer la valeur de donnée.