2015-06-17 7 views
-2

Я использую Transact-SQL (Microsoft SQL Server 2012).Объединение двух запросов SELECT

Я пытаюсь объединить следующие два оператора SELECT, чтобы строки из z были добавлены рядом с объединением x и y.

Но мне еще не повезло.

The two SELECT statements are: 

SELECT x.a, x.b, x.c 
FROM x 
UNION ALL 
SELECT y.a y.b, y.c 
FROM y 

SELECT z.d, z.e, z.f, z.g 
FROM x 
FULL OUTER JOIN z 
ON (x.h = z.h) 
FULL OUTER JOIN y 
ON (y.h = z.h) 

Все три таблицы (x, y и z) содержат строку «h».

+0

У вас возникли какие-либо ошибки? Или результат отличается от того, что вы ожидаете? – Marki555

+3

Ваш вопрос будет более понятным с данными образца и желаемыми результатами. –

ответ

0

Похоже, что вы пытаетесь получить семь столбцов в вашем выводе, мы с вами можем сделать так:

SELECT x.a, x.b, x.c, z.d, z.e, z.f, z.g 
FROM x 
FULL OUTER JOIN z 
ON (x.h = z.h) 
FULL OUTER JOIN y 
ON (y.h = z.h) 
UNION ALL 
SELECT y.a y.b, y.c, z.d, z.e, z.f, z.g 
FROM y 
FULL OUTER JOIN z 
ON (y.h = z.h) 
FULL OUTER JOIN x 
ON (y.h = x.h) 

Если нет какой-то причине, почему вы должны объединить все три таблицы в обоих запросах, это можно укоротить до:

SELECT x.a, x.b, x.c, z.d, z.e, z.f, z.g 
FROM x 
FULL OUTER JOIN z 
ON (x.h = z.h) 
UNION ALL 
SELECT y.a y.b, y.c, z.d, z.e, z.f, z.g 
FROM y 
FULL OUTER JOIN z 
ON (y.h = z.h) 

Вы также должны оценить, действительно ли вам нужны внешние соединения. Это было бы необходимо, только если вы не ожидаете, что соответствующие значения всегда будут находиться в обеих таблицах.

+0

Привет Марк, вы правы - это так же просто, как ваш второй ответ. Благодарим вас за помощь! – mozo

Смежные вопросы