2012-05-29 2 views
0

Я следующий запрос, который дает мне поставщик для данного заголовка:Исключить нулевые результаты на UNION запросе

SELECT DISTINCT(provider) FROM 
    (SELECT title, provider FROM financials_raw 
     UNION 
     SELECT title, provider from sales_raw 
    ) combined 
     WHERE title = 'Home' 

Однако это будет возвращать NULL результатов поставщика, а также, как я бы исключить все нуль Результаты?

+3

'WHERE title = 'Home' И провайдер IS NULL'? – eggyal

+0

согласен с @eggyal – MikeTWebb

+0

Да, и отбросьте круглую скобку, 'distinct (x)' совпадает с 'distinct x' – Andomar

ответ

8

Далее на мой комментарий выше, следующий запрос будет сделать то же самое, но более эффективным (как нежелательные записи не первый соединены в UNION операции, прежде чем затем фильтруется из материализованной таблицы):

SELECT provider FROM financials_raw WHERE title = 'Home' AND provider IS NOT NULL 
UNION 
    SELECT provider FROM  sales_raw WHERE title = 'Home' AND provider IS NOT NULL 

Обратите внимание, что UNION (без квалификации ALL) подразумевает DISTINCT.

+0

Спасибо, не могли бы вы объяснить, почему этот запрос более эффективен, чем тот, который указан выше? – David542

+2

@ David542: ** поскольку нежелательные записи сначала не объединяются в операцию UNION, а затем фильтруются из материализованной таблицы ** – eggyal