J'ai trois tables:
CREATE TABLE [dbo].[Word] ( [WordId] INT IDENTITY (1, 1) NOT NULL, [Word] VARCHAR (20) NOT NULL ) CREATE TABLE [dbo].[Temp] ( [HeaderWord] VARCHAR (20) NOT NULL, [OtherWord] VARCHAR (20) NULL ); CREATE TABLE [dbo].[WordRelationship] ( [HeaderWordId] INT NOT NULL, [OtherWordId] INT NULL, CONSTRAINT [PK_WordRelationship] PRIMARY KEY CLUSTERED ([HeaderWordId] ASC, [OtherWordId] ASC) );
La troisième table est vide. Y at-il un moyen avec SQL et pas avec un slider que je pourrais remplir la table WordRelationship avec les valeurs Id de l'en-tête et autre mot? Notez que dans certains cas, il ne peut pas y avoir un autre mot pour chaque ligne dans Temp2. Chaque HeaderWord et OtherWord a également une input dans la table Word.
Voici quelques exemples de données pour la table des mots
WordId Word ------ ---- 5472 abandon 5473 abandoned 5474 abandoning 5475 abandonment 5476 abandons 5477 abstraction 5478 abstractions 5479 abstractly 5480 abstracts
Voici quelques exemples de données pour la table temporaire
Header Other Word Word ------- ---------- abandon abandoned abandon abandoning abandon abandonment abandon abandons
INSERT INTO WordRelationship SELECT DISTINCT a.WordId, b.WordId FROM Temp t INNER JOIN Word a ON t.HeaderWord = a.Word INNER JOIN Word b ON t.OtherWord = b.Word
Vous avez besoin de DISTINCT
car il peut y avoir des duplicates dans la table Temp
. Aussi, je recommand INNER JOIN
, il doit éliminer null si il n'y a pas de mots de la table Temp
dans la table Word
.
Essayer
INSERT INTO [dbo].[WordRelationship] SElECT a.WordId, b.WordId from [dbo].[Temp] t JOIN [dbo].{Word] a on t.HeaderWord = a.Word LEFT JOIN [dbo].{Word] b on t.OtherWord = b.Word
MODIFIER
supprimé LEFT dans Join over Headerword car il s'agit d'un champ non nul dans WordRelationship.