![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
sql запрос на сравнение [Paradox]
mike-d © (2002-12-02 21:30:00)Есть две таблицы, структура одинакова, ключ - первое поле IdClient. Для сравнения используются поля Name, Space, People ну и еще пару... Требуется:
Вернуть в запросе из первой таблицы те записи, для которых при совпадении IdClient не совпадают значения любого из перечисленных полей со второй таблицей.
Примечание: Local SQL, BDE.
Max Zyuzin (2002-12-02 23:37:00) [1]Да без проблем!
(оффтоп) :) Хорошо тебе :)) А я еще на работе сижу :(
mike-d (2002-12-02 23:34:00) [2]Ok! Пора спать, еще пересечемся здесь. Спасибо за поддержку.
Max Zyuzin (2002-12-02 23:32:00) [3]Все правильно... именно это она и выбирает... (если я правильно помню то она выбирает декартово произведение)
Если добавить строку
where tab1.IdClient = tab2.IdClient
То выберет только те записи, у которых эти 2 поля совпадают.
А вообще лучше прочитать что нить про SQL
mike-d (2002-12-02 23:22:00) [4]Это просек. Вот интересно (не спец я еще в SQL), если сделать
> select tab1.* from tab1, tab2
то она выберет записи из tab1 столько раз каждую, сколько записей в tab2. Это нормально или я чего не так написал?
Max Zyuzin (2002-12-02 23:18:00) [5]В последнем условии конечно же =
Max Zyuzin (2002-12-02 22:31:00) [6]>mike-d © (02.12.02 22:25)
угу... если че свисти :)
mike-d (2002-12-02 22:25:00) [7]
> Max Zyuzin © (02.12.02 22:07)
Вроде все о"кей. С первого взгляда выбирает как нужно, завтра еще покопаю. Спасибо
Max Zyuzin (2002-12-02 22:07:00) [8]Упс... стормозил :( извиняюсь некдачно прочитал условия....
надо вот так
select tab1.* from tab1, tab2
where tab1.IdClient = tab2.IdClient
and not
((tab1.F1 = tab2.F1)
or (tab1.F2 = tab2.F2)
..
or (tab1.FN <> tab2.FN))
Max Zyuzin (2002-12-02 22:04:00) [9]
select tab1.* from tab1, tab2
where tab1.IdClient = tab2.IdClient
and tab1.F1 <> tab2.F1
..
and tab1.FN <> tab2.FN
Что нить такое пробовал??
bander_log (2002-12-02 22:00:00) [10]Если не Paradox а SQL - можно все это в хранимой процедуре сделать по запросу и использовать в качестве анализатора и получателя только один элемент StoredProc....
mike-d (2002-12-02 21:54:00) [11]Мда...
И возразить-то нечего.
bander_log (2002-12-02 21:50:00) [12]Можно так:
for j := 1 to T1.RecordCount do
begin
if Search_T2 then
begin
if (T2[1] <> T1[1]) or
(T2[2] <> T1[2]) or
.....
(T2[8] <> T1[8]) then
{вывод резутьтата T1}
end;
end;
где Search_T2 любая логическая функция поиска - можешь свою сделать
bander_log (2002-12-02 21:41:00) [13]А что будет использоваться в качестве получателя результата?