Фильтровать результат объединения - PullRequest
6 голосов
/ 29 октября 2010

Я делаю выбор с помощью союза.select * from table_1 union select * from table_2 ...

Возможно ли отфильтровать результат запроса по значениям столбца?

Ответы [ 3 ]

10 голосов
/ 29 октября 2010

Да, вы можете заключить весь свой союз в другой выбор:

select * from (
select * from table_1 union select * from table_2) as t
where t.column = 'y'

Вы должны ввести псевдоним для таблицы ("as t").Кроме того, если данные из таблиц не пересекаются, вы можете рассмотреть возможность перехода на UNION ALL - UNION сам по себе работает для устранения дубликатов в наборе результатов.Это часто не нужно.

2 голосов
/ 29 октября 2010

Если вы хотите отфильтровать запрос по некоторым критериям, вы можете сделать это -

Select * from table_1 where table_1.col1 = <some value>
UNION
Select * from table_2 where table_2.col1 = <some value>

Но я бы сказал, что если вы хотите отфильтровать результат, чтобы найти общие значения, вы можете вместо этого использовать объединения

Select * from table_1 inner join table_2 on table_1.col1 = table_2.col1
1 голос
/ 21 марта 2017

Простое для чтения решение - использовать CTE (общее табличное выражение). Это принимает форму:

WITH foobar AS (
    SELECT foo, bar FROM table_1
    UNION
    SELECT foo, bar FROM table_2
)

Затем вы можете обращаться к CTE в последующих запросах по имени, как если бы это была обычная таблица:

SELECT foo,bar FROM foobar WHERE foo = 'value'

CTE довольно мощные, я рекомендую читать дальше здесь

Один совет, который вы не найдете в этой статье MS; если вам требуется более одного CTE, поместите запятую между операторами выражения. например:

WITH foo AS (
    SELECT thing FROM place WHERE field = 'Value'
),
bar AS (
    SELECT otherthing FROM otherplace WHERE otherfield = 'Other Value'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...