Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вычисть 2 таблицы / 6 сообщений из 6, страница 1 из 1
13.08.2009, 08:33
    #36140793
Albert777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Такой вопрос!!! Есть 2 таблицы одинаковой структуры. Необходимо из первой таблицы вычисть вторую, чтобы остались только те строки, которые входят в первую, но не входят во вторую. Подскажите пожалуйста как это реализовать??
...
Рейтинг: 0 / 0
13.08.2009, 09:52
    #36140919
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Albert777Такой вопрос!!! Есть 2 таблицы одинаковой структуры. Необходимо из первой таблицы вычисть вторую, чтобы остались только те строки, которые входят в первую, но не входят во вторую. Подскажите пожалуйста как это реализовать??

Имеем 2 таблицы - TABLE1 и TABLE2. В каждой по одному полю MyPole (символьное). Тогда :

Код: plaintext
SELECT MyPole FROM table1 WHERE table1.MyPole NOT in (SELECT MyPole FROM table2) INTO CURSOR MyCursor

Результат получаем в курсоре MyCursor.
...
Рейтинг: 0 / 0
13.08.2009, 10:08
    #36140944
Albert777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Это понятно. Но мне надо по всей строке, по всем полям..
...
Рейтинг: 0 / 0
13.08.2009, 10:50
    #36141074
Tohan_ORA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Albert777Есть 2 таблицы одинаковой структуры. Необходимо из первой таблицы вычисть вторую, чтобы остались только те строки, которые входят в первую, но не входят во вторую
==РАЗНОСТЬ двух таблиц
Albert777Это понятно. Но мне надо по всей строке, по всем полям..

Данные:
Код: plaintext
1.
CREATE CURSOR c1(a i,b i,c i,d i,e i)
CREATE CURSOR c2(a i,b i,c i,d i,e i)

Код: plaintext
1.
2.
3.
4.
5.
for j= 1  to  15 
if j< 11 
 insert into c1 values(j,j+ 1 ,j+ 2 ,j+ 3 ,j+ 4 ) 
endif
insert into c2 values(j,j+ 1 ,j+ 2 ,j+ 3 ,j+ 4 ) 
endfor


Вычтем из таблицы С2 таблицу C1:
Код: plaintext
1.
2.
3.
4.
select a,b,c,d,e from;
(SELECT a,b,c,d,e, 1  gr FROM c2;
 union;
select a,b,c,d,e,  2   FROM c1)x;
group BY a,b,c,d,e HAVING SUM(gr)= 1 
этот вариант будет работать если обе таблицы не содержат дублей по полям по которым группируем полученный набор
В противном случе используем следующую конструкцию с перечислением полей по которым сравниваем:
Код: plaintext
SELECT * FROM c2 x WHERE  NOT exists(SELECT  1  FROM c1  WHERE a=x.a AND b=x.b AND c=x.c AND d=x.d AND e=x.e)
...
Рейтинг: 0 / 0
13.08.2009, 10:50
    #36141077
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Albert777Это понятно. Но мне надо по всей строке, по всем полям..

Если это понятно, то несложно продолжить мысль (вообще, это вы могли бы додумать сами) :

Код: plaintext
1.
2.
SELECT * FROM table1 WHERE table1.pole1 ;
NOT in (SELECT pole1 FROM table2) ;
OR table1.pole2 NOT in (SELECT pole2 FROM table2)

Неизвестно, сколько там у вас и каких полей, посему придется сравнивать их все. Запись таблицы - это не "строка", это набор полей, которые вам придется сравнивать.
...
Рейтинг: 0 / 0
13.08.2009, 10:58
    #36141107
Tohan_ORA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вычисть 2 таблицы
Поправлюсь :-)
Tohan_ORA
Код: plaintext
1.
2.
3.
4.
select a,b,c,d,e from;
(SELECT a,b,c,d,e, 1  gr FROM c2;
 union ALL;
select a,b,c,d,e,  2   FROM c1)x;
group BY a,b,c,d,e HAVING SUM(gr)= 1 
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вычисть 2 таблицы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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