2013-09-19 4 views
1

Я пытаюсь выполнить запрос с объединением и затем добавить дополнительное условие для результата. В принципе, я хочу, чтобы иметь что-то вродеУсловие SQL для объединенных таблиц

SELECT * FROM (A UNION B) WHERE условие

Возможно ли это сделать? Когда я пытаюсь выполнить

SELECT * FROM (A UNION B)

SQL Management Studio жалуется на закрывающей скобкой:

Неправильный синтаксис около ')'.

ответ

2
SELECT * 
FROM (SELECT * FROM A 
     UNION 
     SELECT * FROM B 
) temp 
WHERE condition 
+0

Спасибо Люк, я понимаю, что мне не хватает – superM

1

Вот правильный синтаксис:

SELECT * 
FROM (select from A 
     UNION 
     select from B 
    ) ab 
WHERE condition; 

Я согласен, что оригинальный синтаксис «выглядит правильно» для from заявления, но SQL не позволяет. Кроме того, вам нужен псевдоним в подзапросе (требование SQL Server). Наконец, вы можете использовать union all, если знаете, что в таблицах нет дубликатов.

1

как о с КТР:

with tbl as (
    select * from a 
    union 
    select * from b) 
select * from tbl where condition 
+0

я предпочитаю свой ответ, чем у меня. 'with' до сих пор не является естественным для меня. –

+0

Thats funny, так как я все еще привык к вашему пути, но в последнее время я подталкивал себя к использованию большего количества CTE. Иногда CTE просто много на экране, и они заканчиваются тем же самым для компилятора ... – sasonic

0

Использование псевдонима для производной таблицы

SELECT * FROM (select * from A UNION select * from B) as t WHERE condition 
Смежные вопросы