纯SQL下将常量'constantHere'替换为可统一修改变量的方法
纯SQL下替换重复常量的变通方案
以下几种方法可以帮你在多UNION的查询里只维护一处常量,不用每次逐处修改:
1. 通用CTE(公共表表达式)方案
这是跨数据库最通用的纯SQL写法,先在CTE里定义好要替换的常量,后续所有子查询都引用这个值,自动拼接%通配符:
WITH query_params AS ( SELECT 'constantHere' AS search_value ) SELECT t.* FROM table1 t JOIN query_params p ON t.column LIKE CONCAT('%', p.search_value, '%') UNION SELECT t.* FROM table2 t JOIN query_params p ON t.column LIKE CONCAT('%', p.search_value, '%') UNION -- 其他UNION子句同理 SELECT t.* FROM tableN t JOIN query_params p ON t.column LIKE CONCAT('%', p.search_value, '%');
只需要修改query_params里的'constantHere',所有子查询的匹配条件会自动同步。
2. 临时表方案
如果你的数据库支持临时表(比如MySQL、SQL Server、PostgreSQL),可以把常量存在临时表里,查询时直接引用:
-- 创建临时表并插入常量 CREATE TEMPORARY TABLE temp_params ( search_value VARCHAR(255) NOT NULL ); INSERT INTO temp_params VALUES ('constantHere'); -- 主查询 SELECT * FROM table1 WHERE column LIKE CONCAT('%', (SELECT search_value FROM temp_params), '%') UNION SELECT * FROM table2 WHERE column LIKE CONCAT('%', (SELECT search_value FROM temp_params), '%') UNION -- 其他UNION子句 SELECT * FROM tableN WHERE column LIKE CONCAT('%', (SELECT search_value FROM temp_params), '%'); -- 用完可以手动删除,部分数据库会话结束会自动清理 -- DROP TEMPORARY TABLE temp_params;
这种方法适合需要在多个不同查询里复用同一个常量的场景。
3. 数据库特定变量方案
虽然不是标准纯SQL,但主流数据库都有自己的变量语法,写法更简洁:
- MySQL/MariaDB:
SET @search_val = 'constantHere'; SELECT * FROM table1 WHERE column LIKE CONCAT('%', @search_val, '%') UNION SELECT * FROM table2 WHERE column LIKE CONCAT('%', @search_val, '%');
- SQL Server:
DECLARE @search_val VARCHAR(255) = 'constantHere'; SELECT * FROM table1 WHERE column LIKE '%' + @search_val + '%' UNION SELECT * FROM table2 WHERE column LIKE '%' + @search_val + '%';
- Oracle:
DEFINE search_val = 'constantHere'; SELECT * FROM table1 WHERE column LIKE '%' || '&search_val' || '%' UNION SELECT * FROM table2 WHERE column LIKE '%' || '&search_val' || '%';
这种方案最省心,不过只适用于特定数据库环境。
内容的提问来源于stack exchange,提问作者DonAndress
相关产品推荐
相关产品推荐

