如何从含自连接的子查询中获取指定字段?SQL问题求助
解决SQL子查询字段提取失败的问题
嘿,这个问题我太熟悉啦!你遇到的错误核心原因是:你的子查询作为派生表时没有指定别名,绝大多数SQL数据库都要求派生表(也就是括号里的子查询结果集)必须有一个临时别名,外层查询才能正确引用它的字段。
正确的子查询写法
只需要给括号里的子查询加一个别名(比如temp或者sub_query,名字随便取)就行:
SELECT a2, b1 FROM ( SELECT a.uid_1, a.uid_2 AS a2, b.uid_1 AS b1, b.uid_2 FROM friend a JOIN friend b ON a.uid_1 = b.uid_2 ) AS temp; -- 这里的AS temp就是给子查询结果加的临时别名
更高效的简化写法
其实你完全不需要嵌套子查询,直接在主查询里只选择你需要的字段就行,这样代码更简洁,执行效率也更高:
SELECT a.uid_2 AS a2, b.uid_1 AS b1 FROM friend a JOIN friend b ON a.uid_1 = b.uid_2;
补充说明(可选优化)
如果后续需要多次复用这个查询结果,还可以用CTE(公共表表达式)来提升可读性:
WITH friend_match AS ( SELECT a.uid_2 AS a2, b.uid_1 AS b1 FROM friend a JOIN friend b ON a.uid_1 = b.uid_2 ) SELECT a2, b1 FROM friend_match;
内容的提问来源于stack exchange,提问作者Jushraf Rahi
相关产品推荐
相关产品推荐

