Si nous avons deux tables ou plus avec les mêmes colonnes
Tableau 1
Structure, Name, Active
1,A,1
Tableau 2
Structure, Name, Active
2,B,0
Nous aimerions combiner ces deux tables et les sauvegarder dans une nouvelle.
Nouvelle table
Structure, Name, Active
1,A,1
2,B,0
Voici le code
CREATE TABLE Amide_actives_decoys
(
Structure NVARCHAR(255),
Name NVARCHAR(255),
Active INT
)
GO
INSERT Amide_actives_decoys
FROM (
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
)
Le message d'erreur suivant apparaîtra
Msg 156, Niveau 15, Etat 1, Ligne 10
Syntaxe incorrecte près du mot clé 'FROM'.
La même chose si on utilise
SELECT * INTO Amide_actives_decoys
FROM (
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
)
Suite à cette réponse
Joindre une table sur elle-même en SQL et sauvegarder le résultat
Le message d'erreur sera
Msg 102, Niveau 15, Etat 1, Ligne 5
Syntaxe incorrecte près de ';'.
Un gourou pourrait-il bien vouloir faire quelques commentaires? Merci!
Cette syntaxe fonctionne dans différentes bases de données:
INSERT INTO Amide_actives_decoys(Structure, Name, Active)
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives;
Dans cette forme d'INSERT, la sortie de la sous-requête devient l'ensemble de valeurs d'entrée pour l'INSERT.
Notez que les types de données pour les expressions dans l'instruction SELECT La sous-requête doit correspondre aux types de données de la table cible de INSERT déclaration.
Toutes les lignes renvoyées par la sous-requête sont insérées dans le fichier Table Amide_actives_decoys.
Si une ligne échoue avec INSERT en raison d'une violation de contrainte ou de En cas de conflit de type de données, la commande INSERT échoue et aucune ligne n'est insérée.
Toute sous-requête valide peut être utilisée dans l'instruction INSERT.
Je pense que vous devez UNION ALL
sinon vous ne pouvez pas capturer toutes les données; dépend des données présentes dans la table (doublons, etc.).
INSERT INTO Amide_actives_decoys(Structure, Name, Active)
SELECT * FROM Amide_decoys
UNION ALL
SELECT * FROM Amide_actives;
La syntaxe générale est
INSERT INTO table2
SELECT * FROM table1;
vous pouvez SELECT INTO Instruction dans ce cas
with cte as (select 1 col1 ,2 col2
union all
select 2,3)
select * into #tabletest from cte
select *From #tabletest
Dans vos deux réponses, le problème est que vous n'avez pas donné d'alias à la table en conséquence. Je pense que vous avez également manqué un 'INTO
' dans la déclaration INSERT
.
Requête 1:
CREATE TABLE Amide_actives_decoys
(
Structure NVARCHAR(255),
Name NVARCHAR(255),
Active INT
)
GO
INSERT INTO Amide_actives_decoys
SELECT *
FROM (
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
) LU --LU is added.
Pour la requête 1, le ci-dessous est également correct
INSERT INTO Amide_actives_decoys
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
Requête 2:
SELECT *
INTO Amide_actives_decoys
FROM (
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
) LU -- LU added
create table Amide_actives_decoys
as
select Structure, Name, Active from
(
SELECT * FROM Amide_decoys
UNION
SELECT * FROM Amide_actives
)
;