Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разность множеств в MS SQL 2000  [new]
greenzed
Member

Откуда:
Сообщений: 4
имеется таблицы A ( key id, key date) , B (key id, key date)

нужно получить записи из таблицы A которые не имеют аналогов в таблице B

Благодарю за помощь.
22 авг 11, 13:57    [11156826]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
not exists
22 авг 11, 13:58    [11156837]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Определение "аналогичности" ? Только id, id+date, только date ?

date - плохое имя поля.

SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE b.id IS NULL OR b.date IS NULL
22 авг 11, 14:01    [11156877]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
greenzed
Member

Откуда:
Сообщений: 4
Программист-Любитель,

Не указал важный момент, в обех таблицах имеются дополнительные поля

Под аналогичностью имею ввиду одинаковое значение id и date
22 авг 11, 14:17    [11157055]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
greenzed,

SELECT id, [date]
FROM dbo.A
EXCEPT
SELECT id, [date]
FROM dbo.B

Все строчки A которых НЕТ в B.
22 авг 11, 17:31    [11159050]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
_Shakill
Guest
SamMan, у автора 2000 сервер
22 авг 11, 17:35    [11159097]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
_Shakill
у автора 2000 сервер


Упс, не внимательно вчитался в заголовок треда. Да - тогда EXCEPT обламывается. Еще один повод проапгрейдиться до R2.
22 авг 11, 17:46    [11159227]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
uaggster
Member

Откуда:
Сообщений: 1056
Программист-Любитель
Определение "аналогичности" ? Только id, id+date, только date ?

date - плохое имя поля.

Ага. Нужно брать в квадратные скобки или кавычки. Впрочем, брать имена полей в квадратные скобки - давно уже правило "безопасного программирование на TSQL"

Программист-Любитель
SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE b.id IS NULL OR b.date IS NULL

Не-а. Не пойдет. Т.к. ниоткуда не следует, что b.id и b.date - не Nullable поля.
Правильнее так:
SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE (b.id IS NULL and b.date IS NULL)
И то, если в id и date могут одновременно быть Null - то не работает.

Совсем правильно, конечно с exists:
SELECT a.id, a.[date] 
FROM a 
WHERE Exists (Select 1 from b Where a.id = b.id AND a.[date] = b.[date]) 

Кстати, в DB2 вполне себе работает:
SELECT a.id, a.[date] 
FROM a 
WHERE (a.id, a.[date]) in (Select b.ID,  b.[date] from b) 
Может, мы тоже доживем более полному следованию SQL92 в новом MS2010? :-)
22 авг 11, 20:48    [11160070]     Ответить | Цитировать Сообщить модератору
 Re: Разность множеств в MS SQL 2000  [new]
qwerty112
Guest
uaggster
Программист-Любитель
SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE b.id IS NULL OR b.date IS NULL

Не-а. Не пойдет. Т.к. ниоткуда не следует, что b.id и b.date - не Nullable поля.
Правильнее так:
SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE (b.id IS NULL and b.date IS NULL)
...

никакой разницы :)
даже так
SELECT a.id, a.date 
FROM a LEFT OUTER JOIN b ON a.id = b.id AND a.date = b.date
WHERE b.id IS NULL /*OR b.date IS NULL*/
разницы - не будет...

uaggster
И то, если в id и date могут одновременно быть Null - то не работает.

+1
но, вроде ТС "намекает", что {id,date} - ключ таблицы
greenzed
имеется таблицы A ( key id, key date) , B (key id, key date)
22 авг 11, 21:08    [11160119]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить