powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT-SQL
14 сообщений из 14, страница 1 из 1
SELECT-SQL
    #33726607
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть две таблицы с одинаковыми полями:
1 таблица
Код: plaintext
CREATE TABLE ECINDIC_DATA_Q_NEW (YEAR N( 4 , 0 ), QUART N( 2 , 0 ), ID_TERR I, ID_INDIC I, VAL N( 19 , 7 ))
2 таблица
Код: plaintext
1.
CREATE TABLE ECINDIC_DATA_Q (YEAR N( 4 , 0 ), QUART N( 2 , 0 ),
ID_TERR I, ID_INDIC I, VAL N( 19 , 7 ))
YEAR - год, QUART - квартал, ID_TERR - id территории, ID_INDIC - id показателя, VAL - значение.
Возможно ли построить запрос, в котором остались записи из 1 таблицы и отсеклись записи, совпадающие со второй таблицей??? Схематично на рисунке то, что осталось красным цветом.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726653
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так полагаю что предикат ...WHERE ... NOT IN (SELECT ... FROM Tabl1) команды SELECT-SQL вам поможет. Точнее не могу, не понял по какому критерию сравнивать записи из разных таблиц.
С уважением, Алексей
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726683
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, немного не до конца рассказал. Сравнивать записи по YEAR, QUART, ID_TERR, ID_INDIC а отличается значение VAL.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726760
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять не понял.
Сравнивать по YEAR, QUART, ID_TERR, ID_INDIC это понятно, а вот при чем тут "отличается значение VAL" ?
С уважением, Алексей
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726831
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KОпять не понял.
Сравнивать по YEAR, QUART, ID_TERR, ID_INDIC это понятно, а вот при чем тут "отличается значение VAL" ?
С уважением, АлексейИзвиняюсь. Неправильно выразился. Критерием является равенство всех полей.

Имеются две таблицы, но записи в них могу совпадать, а могут и нет. Мне надо найти записи в табл.1, которые несовпадают с табл.2

Aleksey-K...Я так полагаю что предикат ...WHERE ... NOT IN (SELECT ... FROM Tabl1) команды SELECT-SQL вам поможет...Я понимаю, что именно этот предикат. Но как построить, не могу сообразить.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726890
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СА Aleksey-KОпять не понял.
Сравнивать по YEAR, QUART, ID_TERR, ID_INDIC это понятно, а вот при чем тут "отличается значение VAL" ?
С уважением, АлексейИзвиняюсь. Неправильно выразился. Критерием является равенство всех полей.

Имеются две таблицы, но записи в них могу совпадать, а могут и нет. Мне надо найти записи в табл.1, которые несовпадают с табл.2

Aleksey-K...Я так полагаю что предикат ...WHERE ... NOT IN (SELECT ... FROM Tabl1) команды SELECT-SQL вам поможет...Я понимаю, что именно этот предикат. Но как построить, не могу сообразить.

Select * from tabl1 where (str(Year)+str(quart)+str(id_terr)+str(id_indic)+str(val)) not in ( select (str(Year)+str(quart)+str(id_terr)+str(id_indic)+str(val)) as cnt from table2) into cursor query nofilter
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726930
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот теперь все ясно:

Код: plaintext
1.
2.
3.
4.
5.
SELECT YEAR, QUART, ID_TERR, ID_INDIC, VAL
FROM FROM ECINDIC_DATA_Q_NEW t1 
WHERE NOT EXISTS(SELECT * FROM ECINDIC_DATA_Q t2 
WHERE t1.YEAR = t2.YEAR AND t1.QUART = t2.QUART 
AND t1.ID_TERR= t2.ID_TERR AND t1.ID_INDIC= t2.ID_INDIC
AND t1.VAL= t2.VAL)
С уважением, Алексей
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726949
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав C.Select * from tabl1 where (str(Year)+str(quart)+str(id_terr)+str(id_indic)+str(val)) not in ( select (str(Year)+str(quart)+str(id_terr)+str(id_indic)+str(val)) as cnt from table2) into cursor query nofilterСпасибо, то что надо.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33726978
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KВот теперь все ясно:
Код: plaintext
1.
2.
3.
4.
5.
SELECT YEAR, QUART, ID_TERR, ID_INDIC, VAL
FROM FROM ECINDIC_DATA_Q_NEW t1 
WHERE NOT EXISTS(SELECT * FROM ECINDIC_DATA_Q t2 
WHERE t1.YEAR = t2.YEAR AND t1.QUART = t2.QUART 
AND t1.ID_TERR= t2.ID_TERR AND t1.ID_INDIC= t2.ID_INDIC
AND t1.VAL= t2.VAL)
С уважением, АлексейОгромное спасибо, тоже, то что надо.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33727035
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы exists не доверял. Не факт что быстро работает.
Мой вариант аутер джойн:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT T1.*
FROM ECINDIC_DATA_Q_NEW t1 
LEFT JOIN ECINDIC_DATA_Q t2 
ON t1.YEAR = t2.YEAR AND t1.QUART = t2.QUART 
AND t1.ID_TERR= t2.ID_TERR AND t1.ID_INDIC= t2.ID_INDIC
AND t1.VAL= t2.VAL
WHERE !isnull(t1.id_indic) and isnull(t2.id_indic)
...
Рейтинг: 0 / 0
SELECT-SQL
    #33727095
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripЯ бы exists не доверял. Не факт что быстро работает.
Мой вариант аутер джойн:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT T1.*
FROM ECINDIC_DATA_Q_NEW t1 
LEFT JOIN ECINDIC_DATA_Q t2 
ON t1.YEAR = t2.YEAR AND t1.QUART = t2.QUART 
AND t1.ID_TERR= t2.ID_TERR AND t1.ID_INDIC= t2.ID_INDIC
AND t1.VAL= t2.VAL
WHERE !isnull(t1.id_indic) and isnull(t2.id_indic)
Спасибо, тоже идет. Для личного самообразования. Хотелось бы поподробнее логический смысл после WHERE
Код: plaintext
WHERE !isnull(t1.id_indic) and isnull(t2.id_indic)
Веде перед WHERE как бы все наоборот ищем записи которые совпадают.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33727127
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно почитать хелп по OUTER JOINам.
Left join делает операцию аналогичную простому соединению, но при этом выбирает все записи из 1-й таблице. Записи 2-й таблицы не удовлетворяющие условию соединения становятся равными NULL.
Я тут не совсем правильно написал. Достаточно было просто
Код: plaintext
WHERE isnull(t2.id_indic)
...
Рейтинг: 0 / 0
SELECT-SQL
    #33727133
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CripМожно почитать хелп по OUTER JOINам.
Left join делает операцию аналогичную простому соединению, но при этом выбирает все записи из 1-й таблице. Записи 2-й таблицы не удовлетворяющие условию соединения становятся равными NULL.
Я тут не совсем правильно написал. Достаточно было просто
Код: plaintext
WHERE isnull(t2.id_indic)
Точно, понял идею. Еще раз спасибо.
...
Рейтинг: 0 / 0
SELECT-SQL
    #33731309
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Crip!

Насчёт скорости - это зависит от версии фокса. В свежих exists работает
весьма шустро (это кстати довольно легко проверить).

Насчёт твоего варианта - увы, но он годится лишь для свежих версий фокса
(где и производительность exists на высоте). В VFP6 и 7 такого типа запросы
работают некорректно (про более древние версии не скажу), причём в VFP7 есть
ещё зависимость от наличия индекса по "проверяемому" полю.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT-SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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