powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / where not exists (select... и Null
2 сообщений из 2, страница 1 из 1
where not exists (select... и Null
    #35371689
SuperNick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
В свое время из-за некоторой поспешности (но четкой постановки, исключающей Null, подробности далее) при задаче сравнения содержимого таблиц использовали select ... where not exists (select...), например:
select a.code_type, a.name_type from ETYPES a where not exists
(select b.code_type, b.name_type from ETYPES b where a.code_type=b.code_type and a.name_type=b.name_type)

Задача была такая: имелись 2 БД на Access, которые раз в три месяца синхронизировались, но перед этим определялось, что пользователи не внесли самовольно изменеиня любого плана в таблицы-классификаторы, содержащие типы деталей и т.д. Все поля, по которым проводилось сравнение, являлись или ключевыми, или обязательными, т.е. случаев, когда мог встретиться NULL, не было. Сейчас задача расширена еще на несколько таблиц, требуется сверять уже второстепенные поля, некоторые из которых могут содержать NULL. Пока от технологии такой "сверки", к сожалению отказаться нельзя.

На этом существующий прием ст ановится несостоятельным, т.к., как известно, конструкция '...where not exists...' в будет обрабатывать пустые (NULL) совсем не так, как хотелось бы - сравнивая Null и Null при прочих равных, он "найдет" в них отличие.
Вчера обощел несколько форумов, пытаясь найти максимально быстрый выход из ситуации (сейчас занимаемся совсем другими делами). Почитал описание All, Any, Some... Пока не могу решиться предложить что-либо, т.к. раньше вообще не сталкивался с этой областью применения SQL.

Не могли бы Вы подсказать, что может заменить '...where not exists...' в моей ситуации, какой вариант следует рассмотреть поближе?
...
Рейтинг: 0 / 0
where not exists (select... и Null
    #35371701
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare @t1 table(id int primary key, name sysname null)
declare @t2 table(id int primary key, name sysname null)

insert into @t1(id,name) values( 1 ,'yes!')
insert into @t2(id,name) values( 1 ,null)

select *
from @t1 a 
where not exists(select * from @t2 b where a.id = b.id and (a.name = b.name or a.name is null and b.name is null))
result:
Код: plaintext
1           yes!


-------------------------
There’s no silver bullet!
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / where not exists (select... и Null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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