2013-12-20 59 views
0

我确定之前已经询问过这个问题,但我无法想象如何在谷歌中使用它,所以我在这里。将两个完全不同的结果集合为一个

我有用户的表像这样:

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语句代表在UNION和CTE /子查询中没有被选中的列不能做我想要的东西。

回答

3

使用交叉连接

SELECT * 
FROM MyUser 
CROSS JOIN Object 

或使用旧式连接(我不推荐)

SELECT * 
FROM MyUser, Object 
+0

完美!我有'CROSS APPLY'卡在我的头上,显然是不正确的。我从来没有遇到过这种情况,所以我想不出正确的语法。谢谢。 –

1

试着这么做:

SELECT * FROM MyUser, Object 
相关问题