Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / where not exists (select... и Null / 2 сообщений из 2, страница 1 из 1
12.06.2008, 20:06
    #35371689
SuperNick
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where not exists (select... и Null
Здравствуйте!
В свое время из-за некоторой поспешности (но четкой постановки, исключающей 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
12.06.2008, 20:15
    #35371701
locky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
where not exists (select... и Null
Код: 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
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / where not exists (select... и Null / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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