如何在MySQL中结合参数使用WITH子句(类PostgreSQL写法)
在MySQL中结合WITH子句与VALUES使用参数的方法
MySQL 8.0及以上版本支持WITH(公共表表达式,CTE),但语法上和PostgreSQL的WITH ... AS (VALUES(...))略有不同,你可以通过以下方式实现类似效果:
单参数场景
如果只需要传递单个参数,直接用SELECT语句在CTE中定义参数即可:
WITH params(idmodelo) AS ( SELECT 10 AS idmodelo ) SELECT * FROM modelo WHERE idmodelo = (SELECT idmodelo FROM params);
多参数场景
如果需要传递多个参数,用UNION ALL拼接多个SELECT来模拟VALUES的多行效果:
WITH params(idmodelo) AS ( SELECT 10 UNION ALL SELECT 20 UNION ALL SELECT 30 ) SELECT * FROM modelo WHERE idmodelo IN (SELECT idmodelo FROM params);
补充说明
MySQL并不支持直接在CTE中使用VALUES(...)作为数据源,所以用SELECT或UNION ALL的方式是最贴近PostgreSQL写法的替代方案,同样能实现将参数封装到CTE中复用的需求。
内容的提问来源于stack exchange,提问作者Abel Huanacchiri
相关产品推荐
相关产品推荐

