2013-12-20 7 views
0

Я уверен, что это было задано раньше, но я не могу придумать, как его фразировать в Google, поэтому я здесь.Объедините два несопоставимых набора результатов в один

У меня есть таблица пользователей, как так:

create table MyUser 
(
    Id int 
) 

insert into MyUser(Id) 
select 1 union 
select 2 union 
select 3 union 
select 4 union 
select 5 

И таблица объектов, как так:

create table Object 
(
    Id int 
) 

insert into Object(Id) 
select 1 union 
select 2 union 
select 3 

То, что я хочу в качестве результирующего набора это (первый столбец MyUser. Id, второй - Object.Id):

1, 1 
1, 2 
1, 3 
2, 1 
... 

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

Как бы я это сделал? Я играю с CTE/подзапросами и UNION, но я не могу понять, как отфильтровать фиктивные значения для операторов UNION, которые представляют собой столбец, который не выбран в этой части UNION, и подзапросы CTE/не в состоянии делать то, что я хочу.

ответ

3

Использование перекрестного соединения

SELECT * 
FROM MyUser 
CROSS JOIN Object 

или с использованием старого стиля объединения (который я не рекомендую)

SELECT * 
FROM MyUser, Object 
+0

идеальный! У меня «CROSS APPLY» застрял у меня в голове, что, очевидно, не так. Я никогда не был в этой ситуации раньше, поэтому я не мог придумать правильный синтаксис. Благодарю. –

1

Попробуйте что-то вроде:

SELECT * FROM MyUser, Object 
Смежные вопросы