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

Откуда:
Сообщений: 4
Здравствуйте, уважаемые форумчане!
Помогите решить следующую задачу. Имеются две таблицы: Schedule и Replacements, Расписание и Замены, соответственно.

Таблица Schedule:
Key SubjectName
1 Физика
2 Математика
3 Русский язык
4 Иностранный язык


Таблица Replacements:
Key SubjectName
1 История
2 Физическая культура


Мне требуется получить расписание с заменами, т.е записи из правой таблички, у которых значение поля Key совпадает со значением такого же поля в левой таблице, должны их заменить. Должно быть так:

Расписание с заменами:
Key SubjectName
1 История
2 Физическая культура
3 Русский язык
4 Иностранный язык


Пытался сделать это с помощью LEFT JOIN, вот что получилось:
Key SubjectName Key SubjectName
1 Физика 1 История
2 Математика 2 Физическая культура
3 Русский язык NULL NULL
4 Иностранный язык NULL NULL


Но это не то, что мне нужно. Есть ещё мысль, скопировать данные из левой таблицы во временную таблицу, в ней заменить записи с совпадающим полем Key записями из правой таблицы с помощью Update, а уже её отдавать в качестве результата. Представленные выше таблицы - только пример, в реальной базе данных из таблицы Schedule данные можно выбирать по ID группы, ID преподавателя, ID недели. Поэтому объём данных, копируемый во временную таблицу, будет не очень большим, но я не знаю насколько такой подход быстр и эффективен.
Поэтому мой вопрос такой: как можно решить мою задачу? Может быть, можно написать такой запрос, в котором бы данные выбирались из двух таблиц так, что если есть совпадающие значения(поле Key в моём примере), то они(данные) берутся из правой таблицы; если нет-то из левой?
Заранее спасибо.
6 фев 14, 12:31    [15527680]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nikolay_c
Но это не то, что мне нужно. Е

ISNULL([Расписание с заменами].SubjectName, Schedule.SubjectName)
6 фев 14, 12:33    [15527701]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
isnull(t2.SubjectName, t1.SubjectName)
6 фев 14, 12:33    [15527704]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
nikolay_c
Member

Откуда:
Сообщений: 4
Спасибо, но что-то не пойму как использовать ISNULL. И кроме того, мне нужно сравнивать значения именно по значению поля Key, наименование предмета использовать никак нельзя.
6 фев 14, 12:47    [15527813]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
nikolay_c
Member

Откуда:
Сообщений: 4
Извините, я не правильно написал. Поле Key это не ключ, правильно оно должно называться PairIndex-т.е индекс пары. Таким образом, определение того, что у пары есть замена определяется по наличию индекса этой пары в таблице Замены, а также названию группы(здесь не указано).
6 фев 14, 12:54    [15527903]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
Glory
Member

Откуда:
Сообщений: 104760
nikolay_c
Спасибо, но что-то не пойму как использовать ISNULL.

Написать его в списке полей SELECT
6 фев 14, 12:55    [15527911]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @Schedule table ([key] int,Name nvarchar(20) )
declare @Replacement table ([key] int,Name nvarchar(20) )
insert into @schedule ([key], name)
values (1, 'AAA'), (2,'BBB'), (3, 'CCC')
insert into @Replacement ([key], name)
values (1, 'AAA rep by DDD'), (2,'BBB rep by EEE')
select 
  s.[Key] , ISNULL(r.name, s.name)
from @Schedule s
 left outer join @Replacement r on s.[key] =r.[key]
6 фев 14, 12:57    [15527926]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
nikolay_c
Member

Откуда:
Сообщений: 4
Maxx, СПАСИБО, получилось. Написал запрос как Вы написали, только со своими таблицами. Получилось так:
SELECT s.[Key], ISNULL(r.SubjectName, s.SubjectName)
FROM Schedule AS s
LEFT OUTER JOIN Replacements AS r ON s.[Key]=r.[Key];

Теперь попробую использовать его в основной БД.
Всем спасибо!
6 фев 14, 13:28    [15528181]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо объединить данные из двух таблиц.  [new]
Maxx
Member [скрыт]

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

да вам об ето в первом же ответе написали....
6 фев 14, 13:29    [15528194]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить