Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Дополнить таблицу строками  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый вечер.

Нужно каждую строку с таблицы "А" дополнить строками с таблиц "B" и "C". Последовательность ID должна продолжаться. В таблице "А" есть свои связи parent-child, при добавлении строк с "B" к "А" строки "А" становятся parent для "B", при добавлении строк с "С" к "А" уже строки "B" становятся parent для "С".

Таблица "А":
IDPARENT_IDNAME
1100A1
2200A2


Таблица "B":
IDNAME
10B1
11B2


Таблица "C":
IDNAME
20C1
21C2


Результат "А" + "B" + "C":
IDPARENT_IDNAME
1100A1
2200A2
31B1
43C1
53C2
62B2
76C1
86C2
24 май 17, 00:49    [20506150]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20482
mezzanine
при добавлении строк с "B" к "А" строки "А" становятся parent для "B", при добавлении строк с "С" к "А" уже строки "B" становятся parent для "С"
Из приведённого примера навылет непонятно по какому принципу выбирается "мама" для вставляемой записи из нескольких потенциально возможных... почему мамой для id=2 стала id=1, а не id=2?
24 май 17, 07:46    [20506321]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
aleks2
Guest
Akina
mezzanine
при добавлении строк с "B" к "А" строки "А" становятся parent для "B", при добавлении строк с "С" к "А" уже строки "B" становятся parent для "С"
Из приведённого примера навылет непонятно по какому принципу выбирается "мама" для вставляемой записи из нескольких потенциально возможных... почему мамой для id=2 стала id=1, а не id=2?


Мамой назначать первую свободную маму.

ЗЫ. А такт-то тредстартер - чудак с известной буквы.
24 май 17, 08:21    [20506354]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Что-то не нашел как можно отредактировать оригинальное сообщение. Буду дополнять тут.
Естественно привел упрощенную структуру. Таблица "А" содержит еще поле с признаком, пусть будет BIT, нужно ли эту строку дополнять данными с таблиц "B" и "C".
почему мамой для id=2 стала id=1,
нет в результате такого.
Таблица "А" содержит много строк и только строки с ID 1 и 2 имеюют этот признак. Как видно в результате строка с ID=1 дополняется строкой(ми) с "B" и стает для них "мамой". Это добавленая строка должна получить ID=MAX(ID)+1, в результате это ID=3. Дальше ID=3 c таблицы "B" дополняется строкой(ми) с "С" и стает для них "мамой". В результате это ID=4 и 5. Но и по аналогии.
24 май 17, 09:04    [20506424]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
Zim90
Member

Откуда:
Сообщений: 105
mezzanine, у Вас либо в таблице результат содержит не все данные, либо логику добавления детей не можете объяснить полностью.

У Вас в таблице, почему-то, В1 привязано только к А1, а Б2 только к А2. А должно быть, по такой логике, А1-Б1, А1-Б2, А2-Б1, А2-Б2.
24 май 17, 09:23    [20506458]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Zim90,

Так и есть, плохо заполнил табличку.
24 май 17, 10:40    [20506795]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7641
Какая там логика, добавить внешний ключ в А второй колонки на первую и выполнить вставку из В и С в А с нумерацией ID.
Исходя из данных примера такой вставки не получится ID в В и С не имеют внешнего ключа.
24 май 17, 10:59    [20506908]     Ответить | Цитировать Сообщить модератору
 Re: Дополнить таблицу строками  [new]
Zim90
Member

Откуда:
Сообщений: 105
Declare @a table (id int primary key identity, id_parent int, name varchar(20))
Declare @b table (id int, name varchar(20))
Declare @c table (id int, name varchar(20))
Declare @a1 int = 0, @a2 int = 0, @b1 varchar(20)

Insert into @a (id_parent, name) values (100, 'A1'), (200, 'A2')--, (300, 'A3')
Insert into @b (id, name) values (10, 'B1'), (11, 'B2')
Insert into @c (id, name) values (20, 'C1'), (21, 'C2'), (22,'C3')
set @a2 = (select count(*) from @a)


While @a1 < @a2
begin
	set @a1 = @a1 + 1
	declare cb cursor for select name from @b 
	open cb										
		fetch next from cb into @b1
		while @@FETCH_STATUS = 0 begin 
			insert into @a (id_parent, name)
			select @a1, @b1
			insert into @a (id_parent, name)
			select  ((select max(id) from @a)), name from @c
			fetch next from cb into @b1
		end	
	close cb
	deallocate cb
end

Select * from @a
24 май 17, 12:40    [20507454]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить