怎么写sql查询到这个?

时间:2012-02-08 10:24:21

标签: sql sql-server sql-server-2005

我有一个名为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

如何为此编写查询?请帮助为此编写查询。

2 个答案:

答案 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