Comment puis-je remplir une table d'une autre avec une search pour chaque ligne?

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.