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

Откуда: Кы-рск
Сообщений: 1034
Есть две таблицы оригинал(field1,field2) и копия, в оригинале внесли(не внесли) изменения в поле field1, как построить SQL запрос , чтоб узнать были сделаны изменения в оригинале или нет...
14 янв 14, 15:42    [15414004]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
Dima T
Member

Откуда:
Сообщений: 15281
если field2 это ключ то так
select * from t1 full join t2 on t1.field2 = t2.field2 where nvl(t1.field1, ' ') != nvl(t2.field1, ' ')

если ключа нет, то сложнее, но можно
14 янв 14, 16:03    [15414143]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1034
Dima T,

Спасибо
14 янв 14, 17:51    [15414753]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1034
можно ли использовать в качестве ключа номер записи, ведь кол-во записей что в копии, что в оригинале одинаково..., что-то типа
select recno() as _key1, * from t1 full join (select recno() as _key1, * from t2) t2 on t1._key1 = t2._key1...?
15 янв 14, 10:08    [15416888]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
Станислав С...кий
Guest
q1w1e1,
Нельзя. Так как в этом случае будет важно не только совпадение ключей в полях field2, но еще и порядок следования записей в каждой из таблиц... А этот параметр сложно поддается прогнозированию... примерно в такой же степени, как прогнозирование погоды...
15 янв 14, 11:18    [15417352]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
Dima T
Member

Откуда:
Сообщений: 15281
q1w1e1
можно ли использовать в качестве ключа номер записи, ведь кол-во записей что в копии, что в оригинале одинаково..., что-то типа
select recno() as _key1, * from t1 full join (select recno() as _key1, * from t2) t2 on t1._key1 = t2._key1...?

если есть уверенность что PACK не было, то можно. Только язык SQL не имеет такого понятия как номер записи, поэтому советую сделать сначала выборку в курсор через SCAN, а потом как я выше писал. Примерно так
create cursor c1 (id i, field1 c(10), field2 c(10))
sele t1
scan
     insert into c1 (id, field1, field2) values (recno('t1'), t1.field1, t1.field2)
endscan
create cursor c2 (id i, field1 c(10), field2 c(10))
sele t2
scan
     insert into c2 (id, field1, field2) values (recno('t2'), t2.field1, t2.field2)
endscan
select * from с1 full join с2 on с1.Id = c2.Id where nvl(c1.field1, ' ') != nvl(c2.field1, ' ') or nvl(c1.field2, ' ') != nvl(c2.field2, ' ')


Более универсальный вариант отсортировать обе таблицы по field1+field2 и идти сканом по обоим сравнивая на больше/равно/меньше. Так можно вычислить все изменения включая удаления.
15 янв 14, 19:42    [15421124]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос для двух таблиц  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1034
спасибо..
16 янв 14, 06:55    [15422573]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить