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

Откуда:
Сообщений: 20
Имею дело с MS SQL 7
Составляю запрос, призванный получить записи из таблицы "Table_A", идентификаторов которых нет ни в одной из таблиц "Table_B", "Table_C", "Table_D",
следующего вида :

SELECT Field_Key FROM Table_A A
WHERE
NOT EXISTS ( SELECT Field_B FROM Table_B
WHERE Table_B.Field_Key = A.Field_Key
UNION ALL
SELECT Field_C FROM Table_C
WHERE Table_C.Field_Key = A.Field_Key
UNION ALL
SELECT Field_D FROM Table_D
WHERE Table_D.Field_Key = A.Field_Key )

и наблюдаю явно "неправильные" данные. Попытка поменять два последних SELECT-а местами, а именно :

SELECT Field_Key FROM Table_A A
WHERE
NOT EXISTS ( SELECT Field_B FROM Table_B
WHERE Table_B.Field_Key = A.Field_Key
UNION ALL
SELECT Field_D FROM Table_D
WHERE Table_D.Field_Key = A.Field_Key
UNION ALL
SELECT Field_C FROM Table_C
WHERE Table_C.Field_Key = A.Field_Key )

приводит к другим результатам выборки, нежели в первом случае. После анализа этих результатов прихожу к выводу, что последний "SELECT" игнорируется. Я, конечно, могу, написать три "NOT EXISTS" и объединить их по "AND", но все же - в чем тут проблема?

С уважением, MIK.
5 май 03, 15:46    [190435]     Ответить | Цитировать Сообщить модератору
 Re: Несколько "UNION ALL"  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
А накой тут union all?
5 май 03, 16:00    [190451]     Ответить | Цитировать Сообщить модератору
 Re: Несколько "UNION ALL"  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Может так надо

SELECT 

Field_Key
FROM Table_A A
WHERE NOT EXISTS
(SELECT
B.Field1
FROM
(SELECT Field_B AS Field1 FROM Table_B
UNION
SELECT Field_C Field1 FROM Table_C
UNION
SELECT Field_D Field1 FROM Table_D) AS B
WHERE A.Field_Key = B.Field1 )
5 май 03, 16:04    [190454]     Ответить | Цитировать Сообщить модератору
 Re: Несколько "UNION ALL"  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
>>и наблюдаю явно "неправильные" данные
проверь еще раз
вроде все должно быть нормально
а можешь сделать по другому

SELECT A.Field_Key FROM Table_A A
left outer join Table_B B on (B.Field_Key = A.Field_Key)
left outer join Table_C C on (C.Field_Key = A.Field_Key)
left outer join Table_D D on (D.Field_Key = A.Field_Key)
where B.Field_Key is null
and C.Field_Key is null
and D.Field_Key is null
5 май 03, 16:12    [190466]     Ответить | Цитировать Сообщить модератору
 Re: Несколько "UNION ALL"  [new]
f_mikle
Member

Откуда:
Сообщений: 20
Да, "UNION ALL" не обязательно - достаточно просто "UNION", но дела это не меняет :( ...
Сейчас написал :

SELECT Field_Key FROM Table_A A
WHERE
NOT EXISTS ( SELECT Field_B FROM Table_B
WHERE Table_B.Field_Key = A.Field_Key )
AND NOT EXISTS
( SELECT Field_C FROM Table_C
WHERE Table_C.Field_Key = A.Field_Key )
AND NOT EXISTS
( SELECT Field_D FROM Table_D
WHERE Table_D.Field_Key = A.Field_Key )

- все стало нормально,
но с вариантом с "UNION" осталась неясность...
5 май 03, 19:05    [190721]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить