T-SQL中如何实现两个字面量表的连接操作?
在T-SQL中连接两个字面量表的正确语法
问题根源
你之前的写法报错,核心原因是T-SQL中使用JOIN(默认等同于INNER JOIN)时必须指定ON连接条件,不能省略。无论是内连接、全外连接还是其他类型的连接,都需要明确的匹配逻辑;如果是要生成笛卡尔积,则需要用专门的CROSS JOIN语法。
具体写法示例
1. 交叉连接(生成所有行组合)
如果需要获取两个字面量表的全部行组合(笛卡尔积),推荐使用CROSS JOIN(无需ON子句,语义更清晰):
SELECT * FROM (VALUES (1), (3), (5), (7), (9)) AS X(a) CROSS JOIN (VALUES (0), (2), (4), (6), (8)) AS Y(b);
也可以用JOIN加恒真条件替代(不推荐,可读性不如CROSS JOIN):
SELECT * FROM (VALUES (1), (3), (5), (7), (9)) AS X(a) JOIN (VALUES (0), (2), (4), (6), (8)) AS Y(b) ON 1 = 1;
2. 内连接(匹配指定条件的行)
如果有实际的匹配逻辑,比如要求a = b + 1,需要在ON子句中明确条件:
SELECT * FROM (VALUES (1), (3), (5), (7), (9)) AS X(a) INNER JOIN (VALUES (0), (2), (4), (6), (8)) AS Y(b) ON X.a = Y.b + 1;
3. 全外连接(保留两个表所有行)
使用FULL OUTER JOIN可以保留两个表的全部行,无匹配的位置会用NULL填充,同样需要指定连接条件:
SELECT * FROM (VALUES (1), (3), (5), (7), (9)) AS X(a) FULL OUTER JOIN (VALUES (0), (2), (4), (6), (8)) AS Y(b) ON X.a = Y.b + 1;
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

