Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверка на совпадение записей / 14 сообщений из 14, страница 1 из 1
02.01.2015, 13:23
    #38847587
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
Доброго времени суток! Подскажите пожалуйста, есть ли возможность в фокспро сравнить запись одной таблицы, с записью в другой, и если они не совпадают, добавить эту запись в одну из этих таблиц. Спасибо!
...
Рейтинг: 0 / 0
02.01.2015, 16:17
    #38847617
UTF
UTF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
Da mojno..poprobuy EXISTS SQL zapros
...
Рейтинг: 0 / 0
02.01.2015, 18:58
    #38847655
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
UTF,

А можно пример запроса?
...
Рейтинг: 0 / 0
03.01.2015, 15:49
    #38847831
UTF
UTF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
...
Рейтинг: 0 / 0
04.01.2015, 11:12
    #38848023
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
UTF,

Вы наверно меня не так поняли, мне нужно сравнить всю строку, т.е. имеются две одинаковые по структуре таблицы, я сравниваю полностью всю строку одной таблицы, со строками другой таблицы. И если все столбцы этой строки совпадают со сверяемой таблицей, то я эту строку не добавляю в таблицу, иначе добавляю. Иначе говоря сверяю полную идентичность строки, если хоть какая то запись строки разнится, то эту строку добавляю в таблицу.
...
Рейтинг: 0 / 0
04.01.2015, 12:22
    #38848034
UTF
UTF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
IF ("Select (Col1+Col1+Col...) From Table" !=(Text1.Text+Text2.Text....))
...
Рейтинг: 0 / 0
04.01.2015, 12:45
    #38848038
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
mag034

Проверьте UNION
SELECT * FROM table1 ;
UNION ;
SELECT * FROM table2
...
Рейтинг: 0 / 0
04.01.2015, 16:50
    #38848128
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
mag034UTF,

Вы наверно меня не так поняли, мне нужно сравнить всю строку, т.е. имеются две одинаковые по структуре таблицы, я сравниваю полностью всю строку одной таблицы, со строками другой таблицы. И если все столбцы этой строки совпадают со сверяемой таблицей, то я эту строку не добавляю в таблицу, иначе добавляю. Иначе говоря сверяю полную идентичность строки, если хоть какая то запись строки разнится, то эту строку добавляю в таблицу.
Правильно он понял. Это один из возможных вариантов решения

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Список записей, которых нет в другой таблице
select table1.* ;
from table1 ;
WHERE NOT EXISTS(SELECT 'x' ;
		FROM table2 ;
		WHERE 	table1.Field1=table2.Field1 ;
			and table1.Field2=table2.Field2 ;
			and table1.Field3=table2.Field3 ;
			and ....)



Это, так сказать, решение "в лоб". Достаточно трудоемкое, поскольку придется перечислять все поля. Однако и самое надежное. Здесь нет неких "умолчаний", которым должны удовлетворять данные таблиц. Кроме того, данное решение легко изменяется под уточняющие требования. Например, сравнение только по некоторым, а не по всем полям...

Решение, предложенное sg12 исходит из предположения, что в таблицах нет дубликатов. В смысле, в самой таблице Table1 нет совершенно одинаковых записей. Объединение таблиц при помощи UNION все дубликаты автоматически удалит. Даже если эти дубликаты были в одной таблице.

Решение через формирование строки Col1+Col1+Col+.. предполагает, что общая длина полученного выражения не превышает 254 символов. Иначе будет ошибка выполнения Select-SQL.

Можно еще решить задачу через формирования контрольных сумм строк SYS(2007). В общем, разные есть варианты...
...
Рейтинг: 0 / 0
04.01.2015, 19:52
    #38848204
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
Спасибо всем большое за уделенное мне время!
ВладимирМ, я получил искомый результат по Вашему запросу. А как правильнее добавить полученные строки в table2 ? Можно ли вывести полученные строки в отдельную таблицу?
...
Рейтинг: 0 / 0
04.01.2015, 20:11
    #38848209
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
как в таблицу загнать нашел - добавить в конце "into table3.dbf", а грамотно ли будет добавить во вторую таблицу через третью или все таки можно это сделать на прямую?
...
Рейтинг: 0 / 0
05.01.2015, 03:13
    #38848292
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
mag034как в таблицу загнать нашел - добавить в конце "into table3.dbf", а грамотно ли будет добавить во вторую таблицу через третью или все таки можно это сделать на прямую?
Для VFP9 - можно. Для младших версий - только через таблицу-посредник

Если речь идет о VFP9, то примерно так

Код: sql
1.
2.
3.
INSERT INTO table2 ;
select * from table1 ;
where not exists(...)


Для младших версий FoxPro используются временная таблица с последующим APPEND FROM. Дело в том, что в младших версиях FoxPro Insert-SQL может вставлять только по одной записи за раз. Просто синтаксис не позволит это сделать.
...
Рейтинг: 0 / 0
05.01.2015, 09:51
    #38848321
mag034
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
ВладимирМ, Спасибо большое Владимир! У Вас такие большие познания в SQL и VFP, что можно позавидовать )). А можно будет с Вами напрямую связываться через агент и аську? ))
...
Рейтинг: 0 / 0
05.01.2015, 10:35
    #38848329
Людмila
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
тоже Выбирает все записи из Таb1, которых нет в Tab2
SELECT * From Tab1 WHERE Id NOT IN (SELECT Id From Tab2)
...
Рейтинг: 0 / 0
05.01.2015, 11:56
    #38848348
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проверка на совпадение записей
В Фоксе время словно остановилось, 2004 год:
http://www.sql.ru/forum/127959/kak-vybrat-ne-sovpadaushhie-stroki-iz-dvuh-tablic?hl=exists
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверка на совпадение записей / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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