我有三张桌子:
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)
);
第三个表是空的。有没有一种方法与SQL,而不是需要一个游标,我可以使用标题和其他单词的Id值填充WordRelationship表?请注意,在某些情况下,Temp2中的每一行可能没有OtherWord。此外,每个HeaderWord和OtherWord在Word表中都有一个条目。
这里是Word表的一些示例数据
WordId Word
------ ----
5472 abandon
5473 abandoned
5474 abandoning
5475 abandonment
5476 abandons
5477 abstraction
5478 abstractions
5479 abstractly
5480 abstracts
这里有一些Temp Table
的样本数据Header Other
Word Word
------- ----------
abandon abandoned
abandon abandoning
abandon abandonment
abandon abandons
答案 0 :(得分:2)
尝试
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
修改强>
在Join over Headerword中删除了LEFT,因为它在WordRelationship中是一个非空字段。
答案 1 :(得分:1)
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
您需要DISTINCT
因为Temp
表格中可能存在重复项。我还建议INNER JOIN
,如果Temp
表中的Word
表中没有单词,它将消除空值。