交叉连接仅返回单表行:同表交叉连接无法获取双列的问题
解决Cross Join只返回单列的问题
哦,我完全懂你碰到的这个小坑!你的交叉连接逻辑其实是对的,但问题出在SELECT子句的取值范围上——你只告诉数据库要返回1这个常量值,压根没把子查询里的2也选出来,所以结果自然只有一列啦。
原查询的问题分析
你的原查询:
select 1 from dual cross join (select 2 from dual) t1;
这里的cross join确实把dual表(一行)和子查询t1(一行)做了笛卡尔积,得到1行数据,但SELECT里只指定了取1,所以数据库只会返回这一个值。
修正后的查询写法
要同时拿到1和2两列,你需要在SELECT里明确包含两个表/子查询的内容,比如这两种写法都可以:
写法1:直接引用子查询的所有列
select 1, t1.* from dual cross join (select 2 from dual) t1;
这里t1.*会把子查询t1里的所有列(也就是那个2)都选出来,结果就是一行两列:1和2。
写法2:给列起别名,更清晰
如果想让结果列名更明确,可以给每个值起别名:
select d.constant_one, t1.constant_two from (select 1 as constant_one from dual) d cross join (select 2 as constant_two from dual) t1;
这样返回的结果列会有清晰的名称constant_one和constant_two,值分别是1和2,可读性更好。
验证结果
不管用哪种写法,执行后都会得到一行两列的结果,和你预期的1 2一致啦。
内容的提问来源于stack exchange,提问作者ProgrammingEnthusiast
相关产品推荐
相关产品推荐

