MySQL使用WITH AS子句报错:未知列NAME.col1,求排查解决
MySQL中WITH AS子句报错的解决方法
你的WITH AS顺序没问题(必须放在SELECT语句之前),报错是因为引用CTE(公共表表达式)的方式错误——不能直接在IN子句里写NAME.col1,得把定义好的CTE当作普通表来查询,提取需要的列值。
修正后的SQL写法
方式1:IN子句内查询CTE
WITH NAME AS ( SELECT col1, col2 FROM TABLE1 ) SELECT col2, col3 FROM TABLE2 WHERE col2 IN (SELECT col1 FROM NAME)
方式2:用JOIN关联(大数据场景更高效)
如果数据量较大,JOIN的性能通常优于IN子句:
WITH NAME AS ( SELECT col1, col2 FROM TABLE1 ) SELECT t2.col2, t2.col3 FROM TABLE2 t2 JOIN NAME n ON t2.col2 = n.col1
额外注意
MySQL 8.0及以上版本才支持WITH AS语法,如果你的版本低于8.0,直接用子查询替代即可:
SELECT col2, col3 FROM TABLE2 WHERE col2 IN (SELECT col1 FROM TABLE1)
内容的提问来源于stack exchange,提问作者hi777
相关产品推荐
相关产品推荐

