从select语句中插入循环

时间:2013-07-02 07:49:44

标签: sql sql-server sql-server-2008 tsql

我需要在我的数据库中创建父子表。我的子表已经存在了很长时间,所以它包含很长的记录列表。我想做什么将子名复制到我的父母表。

子表

---------------
ChildID | ChildNm
---------------
1        |A
2        |B
3        |C

父表

----------------
ParentID|ParentNm|ChildNm
----------------

查询

WHILE (
        SELECT Min(ChildID)
        FROM ChildTable
        ) <
    SELECT Max(ChildID)
    FROM ChildTable

BEGIN
    --INSERT every child NAME TO my parents TABLE
END

这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

我认为不需要循环,我很少这样做。

尝试这样的事情:

insert parent(ChildNm)
select distinct ChildNm from child c
where not exists (select 1 from parent where c.childNm = childNm)

select * from parent

我不确定你想要什么作为父母姓名

*我假设您的父表看起来像这样:

create table parent(ParentID int identity(1,1), ParentNm char(1), ChildNm char(1))

答案 1 :(得分:1)

建筑明智的这种表关系并不好,完全违反法律。

我不知道你想用这个实现解决什么目的。

根据良好的方法和实践,您需要在子表中添加“ParentId”列。

对于每个孩子,您可以设置父ID。我不确定你将如何判断这个阴囊是否与父母一致。

我建议先重新考虑你的方法。

顺便说一句,您可以使用批量插入查询在父表中插入值,如:

   insert into parents (childnm) select  ChildNm from Child group by ChildNm