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

Откуда:
Сообщений: 247
Здравствуйте. У меня есть две таблицы с одинаковой структурой, где первичным ключом является id.
Например, поля такие: name, modelid, vizit.

Как мне выбрать записи из первой таблицы при условии, что
1. Таких записей нет во второй таблице (связь по id).
2. Записи и во второй таблице есть, но хотя бы одно поле не совпадает по значению.

У меня стоит SQL SERVER 2008.

По поводу первого пункта можно, например, сделать так:
select t1.* from t1 left join t2 on t1.id=t2.id where t2.id is null

а по второму пункту наверное merge использовать можно?
20 авг 11, 19:19    [11151495]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
select id, name, modelid, vizit from t1
except
select id, name, modelid, vizit from t2;
20 авг 11, 20:15    [11151571]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
Mandel
Member

Откуда:
Сообщений: 247
Точно будет выбрано то, что изменилось?
А merge просто для слияния?
21 авг 11, 12:21    [11152817]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
_Shakill
Guest
Mandel, в справке есть подробности и про except, и про merge
21 авг 11, 12:36    [11152839]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
Mandel
Member

Откуда:
Сообщений: 247
Подскажите где я ошибся в запросе:

SELECT * into #Download FROM MyDBTest.dbo.Employee
except
SELECT * FROM MyDBTest2.dbo.Employee

select * from
(merge MyDBTest2.dbo.Download as target1
using #Download as source1
on (target1.id = source1.id)
when NOT MATCHED BY TARGET1 then
insert (id,fname,lname) values (source1.id,source1.fname,source1.lname)
when matched and target1.fname<>source1.fname or target1.lname<>source1.lname then
update set target1.fname = source1.fname, target1.lname = source1.lname)

drop table #Download

пишет "Incorrect syntax near 'TARGET1'." возле not matched by
21 авг 11, 18:21    [11153402]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
_Shakill
Guest
Mandel, а для чего в запросе BY TARGET1?
21 авг 11, 18:44    [11153446]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух таблиц  [new]
iljy
Member

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

вы что хотите в итоге получить? Разницу двух таблиц? Вам это в первом же ответе сказали. А MERGE - это инструкция модификации данных. Или вам надо таблицы синхронизировать?
21 авг 11, 19:43    [11153561]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить