我在SQL Server中有两个表,它们通过FK SOPGroupsID相关: -
CREATE TABLE [dbo].[SOPGroups](
[SOPGroupsID] smallint NOT NULL IDENTITY(1,1),
[SOP_Group] varchar(200) NOT NULL UNIQUE,
PRIMARY KEY CLUSTERED (SOPGroupsID));
GO
CREATE TABLE [dbo].[SOPTitle](
[SOPGroupsID] smallint DEFAULT 1 NOT NULL,
[SOPTitleID] smallint NOT NULL IDENTITY(1, 1),
[SOP_Title] varchar(300) NOT NULL UNIQUE,
PRIMARY KEY CLUSTERED (SOPTitleID));
GO
--add relationship between tables SOPGroups and SOPTitle
ALTER TABLE [dbo].[SOPTitle] ADD CONSTRAINT [R1] FOREIGN KEY(SOPGroupsID)
REFERENCES [dbo].[SOPGroups] (SOPGroupsID)
ON UPDATE Cascade
ON DELETE Set default;
GO
我从excel文件导入数据,第一步是将excel文件导入SQL Server中的临时表,然后将数据导入上面的表中,删除重复的条目。我按如下方式将SOP组数据插入表SOPGroups: -
INSERT INTO [dbo].[SOPGroups] (SOP_Group)
SELECT DISTINCT SOP_Group FROM [dbo].['Onthology Return$'] t
WHERE NOT EXISTS
(SELECT SOP_Group FROM [dbo].[SOPGroups] x WHERE x.SOP_Group = t.SOP_Group)
我的问题是如何插入表[SOPTitle]并根据与临时表'Onthology Return $'中的不同SOP_Title匹配的SOP_Group名称从表SOPGroups获取SOPGroupID。
INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title)
SELECT DISTINCT SOP_Group, SOP_Title FROM [dbo].['Onthology Return$'] t
答案 0 :(得分:0)
您可以使用组名之间的联接来获取组ID。
INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title)
SELECT DISTINCT g.SOPGroupsID, t.SOP_Title
FROM [dbo].['Onthology Return$'] t
INNER JOIN [dbo].[SOPGroups] g ON t.SOP_Group = g.SOP_Group
答案 1 :(得分:0)
当新的SOP_Group值插入SOPGroups时,我们可以在此表和导入的表之间的SOP_Group上使用INNER JOIN
。这将返回与插入的SOP_Groups相关的所有SOP_Titles,并从SOPGroups表中获取它们各自的SOPGroupID。
INSERT INTO [dbo].[SOPTitle] (SOPGroupsID, SOP_Title)
SELECT DISTINCT g.SOPGroupsID, t.SOP_Title
FROM [dbo].['Onthology Return$'] t
INNER JOIN [dbo].[SOPGroups] g ON t.SOP_Group = g.SOP_Group
作为警告,SELECT DISTINCT
语句在第二个插入上的工作方式不同,因为它允许为每个SOP_Group插入多个SOP_Title值。