2015-11-11 2 views
-1

У меня есть две таблицы:SQL Server: объединять таблицы со многими условиями

  • таблицу элементов. Каждый элемент имеет тип (строку) и имя.

Table 1 - Items

  • таблице соединений между элементами. Side-A и Side-B содержат ключи из таблицы 1. строны имеет смысл - это дело, если элемент находится на стороне А или стороне В.

Table 2 - Connections

Мы можем предположить, что каждый элемент 1 (желтого цвета) должен иметь как минимум одно соединение с предметом типа 2 (зеленый), а тип 1 - в сторона A, а тип-2 - в стороне B. Может быть также тип 2 в стороне A и тип 1 в стороне B, но мы можем их игнорировать. Мне интересно только по статьям Тип 1, который имеет Сторона B типа 2. В моем примере - это строки, отмеченные красными стрелками.

Теперь мне нужно UPDATE (с T-SQL скрипт) имена каждого пункта 1-го типа, с именем первого элемента типа-2, который связан с ним в сторону В. В моем примере - пункт 1 получит имя пункта 3 (хотя он также имеет соединение с пунктом 6), а пункт 2 получит название пункта 3.

У меня возникли проблемы с этим скриптом, я «будем рады получить помощь ...

+0

Что вы пробовали? Сначала напишите select, а затем подумайте об обновлении. –

+0

Я даже не смог выполнить скрипт select. Я лучше в C#, а не SQL ... – TamarG

+0

Пожалуйста, добавьте соответствующие таблицы ddl + dml для данных примера, чтобы мы могли попытаться работать над ним. не заставляйте нас делать скучные вещи также ... :-) –

ответ

1

Если мы строим это вверх:

Первый шаг: выбрать некоторые данные

select IA.* from Items IA 

второй шаг: присоединиться к соединениям

select IA.* from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 

третий шаг: присоединиться к соединениям с обеих сторон

select IA.* from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key 

Четвертый шаг: просто выбрать то, что мы хотим:

select IA.Key, IB.Name 
from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key 

пятый шаг : делать обновление:

update IA 
set Name = IB.Name 
from Items IA 
inner join Connections C 
on IA.Key = C.Side_A_Key 
inner join Items IB 
on IB.Key = C.Side_B_Key 
Смежные вопросы