2013-07-02 5 views
3

Мне нужно создать родительскую дочернюю таблицу в моей БД. Моя дочерняя таблица уже существует в течение длительного времени, поэтому она содержит длинный список записей. То, что я хочу сделать, копирует имя ребенка в таблицу моих родителей.While Loop insert from select statement

Детский стол

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

Это лучший possib le способ сделать это?

+0

Что, если есть несколько детей на родителей? Родительская таблица допускает только один дочерний элемент для родителя. Кроме того, вы можете сделать это * посмотреть * то же самое с представлением и JOIN – gbn

+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)) 
+0

-_____________- полностью забыл об этом, спасибо, попробуем сейчас –

+0

круто, спасибо за ваш отзыв =) –

1

Архитектура мудрая эта таблица отношения не хорошо и полностью против закона.

Я не знаю, какую цель вы хотите решить, используя эту реализацию.

В соответствии с хорошим подходом и практикой вам необходимо добавить столбец «ParentId» в таблицу «Дети».

И против каждого ребенка вы можете установить родительский идентификатор. Я не уверен, как вы решите, что этот clild блуждает с каким родителем.

Я бы предложил сначала задуматься о вашем подходе.

Кстати, вы можете использовать насыпной запрос вставки для вставки значения в родительской таблице, как:

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