2010-07-31 3 views
2

Как объединить результаты для возврата одного результата в SQL? Например -Комбинировать 2 набора результатов в SQL?

SELECT * FROM Table1 
SELECT * FROM Table2 

Я хочу, чтобы объединить два результирующие с колоннами из второго результирующего приложенных к первому.

Таблица 1 и таблица 2 никак не связаны друг с другом. Если в таблице 1 есть 2 столбца, а в таблице 2 - 4 столбца, мне нужно, чтобы 6 столбцов были возвращены в одном наборе результатов. И если в таблице 1 есть 4 строки, а в таблице 2 всего 2 строки, я хочу NULLS в таблице 2 строки для 3-й и 4-й строки.

Возможно ли это?

Редактировать: я не знаю, сколько столбцов присутствует в таблице 1 и таблице2, поэтому нельзя использовать UNION с нулями.

+1

Это звучит как действительно ужасная вещь, чтобы сделать. Можете ли вы объяснить, почему вы думаете, что это хорошая идея? –

+0

У меня есть требование, когда таблица фактически разделена на две разные таблицы. При возврате значений для таблицы я хочу объединить результаты этих таблиц и вернуться к пользовательскому интерфейсу. Другой вариант - вернуть 2 набора данных, объединить данные в один набор данных и использовать их вместо этого. Просто хотел этого избежать. Благодарю. – tempid

+2

@tempid. Если он разделен, почему он не имеет одинаковое количество строк и что-то не произвольное для присоединения? –

ответ

7

Если ваша РСУБД поддерживает ROW_NUMBER(), вы можете сделать что-то вроде этого.

WITH T1 AS 
(
SELECT *, ROW_NUMBER() OVER (ORDER BY T1id) AS RN1 FROM Table1 
), 
T2 AS 
(
SELECT *, ROW_NUMBER() OVER (ORDER BY T2id) AS RN2 FROM Table2 
) 


SELECT * FROM T1 FULL OUTER JOIN T2 ON RN1 =RN2 
1

Возможно, но это, вероятно, неплохая идея. Почему бы просто не запустить два запроса?

Если вы действительно хотите сделать это, соедините два набора результатов в поле ROW_NUMBER().

-2

Вы можете совместить столбцы, а затем использовать UNION, например.

SELECT a, b, c, NULL, NULL, NULL FROM Table1 
UNION 
SELECT NULL, NULL, NULL, d, e, f FROM Table2 
+0

Я не знаю, сколько столбцов присутствует в таблице 1 и таблице2, поэтому нельзя использовать UNION. – tempid

0

не общее решение, но работает, если вы знаете свою схему:

select a1, a2, null as b1, null as b2 from table1 
union 
select null as a1, null as a2, b1, b2 from table2 
+0

Я не думаю, что это то, чего он хочет. –

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