powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SELECT для остутствующих строк
5 сообщений из 5, страница 1 из 1
SELECT для остутствующих строк
    #32070273
alex2808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет...
Есть такая задачка.
Таблицы:
TAB1, поля KEY, TYPE,.
ТАВ2, поля KEY, TYPE, FLAG,...
Как построить SELECT, чтобы выбрать из TAB1 все записи, которые отсутствуют в TAB2 (сравниваем KEY и TYPE) или если они там есть в TAB2, то выбрать и те у которых FLAG=0...
Запутался уже совсем :(
...
Рейтинг: 0 / 0
SELECT для остутствующих строк
    #32070289
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй JOIN. Код примерно такой

Код: plaintext
1.
2.
SELECT * FROM TAB1 a
LEFT JOIN TAB2 b ON a.KEY = b.KEY and a.TYPE = b.TYPE
WHERE FLAG= 0  OR FLAG IS NULL
...
Рейтинг: 0 / 0
SELECT для остутствующих строк
    #32070298
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще применить, первый вариант быстрее работает.

Код: plaintext
1.
2.
3.
4.
SELECT * FROM TAB1
WHERE KEY + TYPE NOT IN (SELECT KEY + TYPE FROM TAB2)
UNION
SELECT * FROM TAB1
WHERE KEY + TYPE IN (SELECT KEY + TYPE FROM TAB2 WHERE FLAG= 0 )
...
Рейтинг: 0 / 0
SELECT для остутствующих строк
    #32070324
alex2808
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT * FROM TAB1 a
LEFT JOIN TAB2 b ON a.KEY = b.KEY and a.TYPE = b.TYPE
WHERE FLAG= 0  OR FLAG IS NULL

А как будет выглядеть, если чисто отсутствующие строки в ТАВ2, просто убрать WHERE ?
...
Рейтинг: 0 / 0
SELECT для остутствующих строк
    #32070349
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен, что мой вариант будет быстрее работать (хотя и не исключаю), но я считаю что код должен максимально близко отражать поставленную задачу.
Код: plaintext
1.
2.
3.
select * from TAB1 t1 
  where not exists(select * from TAB2 t2 
     where t1.KEY=t2.KEY and t1.TYPE=t2.TYPE and FLAG<> 0 ) 
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SELECT для остутствующих строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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