Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Нахождение дельты между таблицами


Автор: MLans 24.4.2014, 18:55
Здравствуйте, у нас есть 2 таблицы


Таблица1
ID FirstName LastName
1 Иван Иванов
2 Максим Петров

Таблица2
ID FirstName LastName Changes
1 Иван Петров
2 Николай Васильев


нужно проставить в таблице 2 в поле Changes значения в зависимости от того, какие данные были изменены - только фамилия (1) или имя и фамилия (2), запись была удалена или добавлена.

Код

update t2 set Changes = case 
                                           when t2.FirstName = t1.FirstName and t2.LastName = t1.LastName then 0
                                           when t2.FirstName = t1.FirstName and t2.LastName <> t1.LastName then 1
                                           when t2.FirstName <> t1.FirstName and t2.LastName <> t1.LastName then 2
                                         end
  from Таблица2 t2 inner join Таблица1 t1 on t2.ID = t1.ID


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

Спасибо! 

Автор: Akina 25.4.2014, 08:02
Код

update t2 
set Changes = case
                   when t1.ID is null then -1
                   when t2.FirstName = t1.FirstName and t2.LastName = t1.LastName then 0 
                   when t2.FirstName = t1.FirstName and t2.LastName <> t1.LastName then 1 
                   else 2 
               end 
from Таблица2 t2 
left join Таблица1 t1 
    on t2.ID = t1.ID 



Добавлено через 2 минуты и 16 секунд
PS. А чё за СУБД-то?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)