在SQL Server中连接两个表的所有行

时间:2013-12-31 00:31:54

标签: sql sql-server tsql

我的目标是将2个表中的所有行组合在一起。我能想到的最简单的例子是:

表1

Letter
A
B

表2

Number
0
1

合并表

Letter  Number
   A      0
   B      0
   A      1
   B      1

我提出了这个SQL语句:

select * from 
(
select * From (
    select 'A' as 'Letter'
    UNION
    select 'B' as 'Letter'
) as Letter
) as Letter,
(
select * from (
    select 0 as 'Number'
    UNION
    select 1 as 'Number'
) as Number
) as Number

这有效,但我不喜欢它。

  • 多次定义相同的别名
  • 7个选择陈述?真....

有谁知道更清洁的方式吗?我确信答案已经存在,但我不知道如何搜索它。谢谢大家

2 个答案:

答案 0 :(得分:7)

试试这个

select * from table1 join table2 on 1=1

这是笛卡儿的产品,如果这是你想要的,那么 你只需要指定一些始终为真的连接条件。

试试这个。

SELECT * FROM
(
SELECT 'A' AS ch
UNION ALL
SELECT 'B'
)
T1

JOIN

(
SELECT 0 AS dg
UNION ALL
SELECT 1
) T2

ON 1 = 1

在SQL Server中,您也可以执行此操作(如果您发现它更简洁/清晰)。

    SELECT * 
    FROM 
    (
       VALUES 
       ('A'), 
       ('B')
    )
    AS ch1(ch)
    JOIN
    (
        SELECT * 
        FROM 
        (
          VALUES 
          (0), 
          (1)
        )
        AS dg1(dg)
    ) TBL 

    ON 1 = 1

答案 1 :(得分:7)

CROSS JOIN ...

足够简单
SELECT *
FROM Table1
CROSS JOIN Table2

结果:

Letter                    Number
------------------------- -----------
A                         0
B                         0
A                         1
B                         1

(4 row(s) affected)