我有一个名为dbo.name和dbo.class的两个表。
名称
Name id
A 1
B 2
C 3
D 4
类
Id mainid
1
2
这里我需要通过映射表来填充mainid,这意味着假设D是主要名称并且id为4应该成为dbo.class中的mainid。我应该在第一排获得4分。如果c是另一个主要名称,我应该将c的id作为第二行的mainid。
2 3
如何为此编写查询?请帮助为此编写查询。
答案 0 :(得分:0)
我不确定我是否完全理解这个问题。如果类表为空,而您只是想从名称表中填充它;试试这个:
insert into class (mainid)
select id from name
但我不确定我完全理解你的问题。我想我需要更多信息。就像为什么你需要D成为第一个?类表是空的,您只需要使用名称中的数据加载它吗?或者类表中是否已有数据?
如果类表为空,您可以运行我上面发布的sql从名称表中加载它。没有必要将两个表“映射”在一起。但是,如果类表中已有数据,并且您不想复制任何内容,则必须运行以下内容:
insert into class (mainid)
select id from name N
where N.id not in
(select distinct (C.mainid) from class C)
或更好的方法:
insert into class (mainid)
select id from name N
where not exists (select 1 from class C where N.id = C.mainid)
答案 1 :(得分:0)
直到你可以用连贯的例子清楚地解释,这是你能得到的最好的:
SELECT
dbo.name.id, dbo.class.mainid
FROM
dbo.name INNER JOIN dbo.class ON dbo.name.id = dbo.class.id
并将其插入新表:
CREATE TABLE dbo.newtable
SELECT
dbo.name.id, dbo.class.mainid
FROM
dbo.name INNER JOIN dbo.class ON dbo.name.id = dbo.class.id