Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос для двух таблиц / 7 сообщений из 7, страница 1 из 1
14.01.2014, 15:42
    #38525791
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
Есть две таблицы оригинал(field1,field2) и копия, в оригинале внесли(не внесли) изменения в поле field1, как построить SQL запрос , чтоб узнать были сделаны изменения в оригинале или нет...
...
Рейтинг: 0 / 0
14.01.2014, 16:03
    #38525835
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
если field2 это ключ то так
Код: sql
1.
select * from t1 full join t2 on t1.field2 = t2.field2 where nvl(t1.field1, ' ') != nvl(t2.field1, ' ')


если ключа нет, то сложнее, но можно
...
Рейтинг: 0 / 0
14.01.2014, 17:51
    #38526014
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
Dima T,

Спасибо
...
Рейтинг: 0 / 0
15.01.2014, 10:08
    #38526592
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
можно ли использовать в качестве ключа номер записи, ведь кол-во записей что в копии, что в оригинале одинаково..., что-то типа
select recno() as _key1, * from t1 full join (select recno() as _key1, * from t2) t2 on t1._key1 = t2._key1...?
...
Рейтинг: 0 / 0
15.01.2014, 11:18
    #38526708
SQL запрос для двух таблиц
q1w1e1,
Нельзя. Так как в этом случае будет важно не только совпадение ключей в полях field2, но еще и порядок следования записей в каждой из таблиц... А этот параметр сложно поддается прогнозированию... примерно в такой же степени, как прогнозирование погоды...
...
Рейтинг: 0 / 0
15.01.2014, 19:42
    #38527480
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
q1w1e1можно ли использовать в качестве ключа номер записи, ведь кол-во записей что в копии, что в оригинале одинаково..., что-то типа
select recno() as _key1, * from t1 full join (select recno() as _key1, * from t2) t2 on t1._key1 = t2._key1...?
если есть уверенность что PACK не было, то можно. Только язык SQL не имеет такого понятия как номер записи, поэтому советую сделать сначала выборку в курсор через SCAN, а потом как я выше писал. Примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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 и идти сканом по обоим сравнивая на больше/равно/меньше. Так можно вычислить все изменения включая удаления.
...
Рейтинг: 0 / 0
16.01.2014, 06:55
    #38527716
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос для двух таблиц
спасибо..
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос для двух таблиц / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]