2015-06-19 5 views
3

У меня есть две таблицы: MyFull и MyEmpty. Мне нужно сделать комбинацию всех записей из обеих таблиц. Иногда таблица MyEmpty может не иметь записей, в этом случае мне нужно вернуть все записи из MyFull. Это то, что я пробовал:CROSS JOIN с одним пустым столом sql server

--Q1 >> returns no results 
SELECT * 
FROM MyFull CROSS JOIN MyEmpty 

--Q2 >> returns no results 
SELECT * 
FROM MyFull, MyEmpty 

I хотя использования LEFT JOIN, но у меня нет общего ключа, чтобы присоединиться на. Это SQLFiddle

ответ

6

Попробуйте это:

SELECT * 
FROM MyFull 
LEFT JOIN MyEmpty ON 1=1 

Хотя следует помнить, что если у вас есть несколько записей в MyEmpty, он будет повторять записи из MyFull один раз для каждой записи в MyEmpty. Фактически, количество записей в результатах - MyFull * MyEmpty (если у MyEmpty нет записей).

+0

Благодаря Joel. Это то, что я ищу. Я хочу повторить записи на самом деле. – BICube

2

Полная таблица:

declare @t table (Spot int,name varchar(1),pct int) 
insert into @t(Spot,name,pct)values(1,'A',2),(1,'B',8),(1,'C',6),(2,'A',4),(2,'B',5),(3,'A',5),(3,'D',1),(3,'E',4) 

Пустой стол:

declare @tt table (Spot int,name varchar(1),pct int) 
select * from @t OUTER APPLY @tt 
+0

Спасибо mohan. Но решение Joel более интуитивное и я ищу. – BICube

+0

что-либо решение joel, получающее результирующий набор outer apply, делает то же самое @ Ala – mohan111

+0

'SELECT * FROM MyFull OUTER APPLY MyEmpty' кажется довольно интуитивным. Тот же план выполнения тоже уверен. – JamieD77

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