You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:42:54