mysql - 在查询中包含可重复使用的文本 block

标签 mysql sql prepared-statement reusability

我正在寻找一种解决方案来创建一个单独的文本 block (由某些条件组成),我可以只创建一次并稍后在查询中引用它:

例子:

Re-usable text-block (A1, B1, C1, D1 and G1 are actual column names):
-------------
WHERE

A1 > B1 and
B1 < C1 and
D1 > G1  
-------------

这里是 SELECT 命令:

SELECT * FROM table 1

---- insert reference to the re-usable text block --- 

UNION 

SELECT * FROM table 2

---- insert reference to the re-usable text block --- 

UNION

SELECT * FROM table 3

---- insert reference to the re-usable text block --- 
   ;

我在 Select 语句之间使用 UNION 命令,因为我有 30 多个表,我需要从中获取与此可重用文本 block 中定义的完全相同标准相对应的数据。如果我需要进行更改,它将仅适用于这个可重复使用的文本 block 。

我该如何设计才能使我只需要在一个地方进行更改,而不是对每个查询进行一次更改?

最佳答案

这里您需要一个 Prepared Statement 来解决您的问题。 .

这允许您创建一个要运行多次的查询,同时仅更改一些最小的内容,例如列条件。

在你的例子中,如果你想要一个参数化的 where 子句,你可以这样做:

PREPARE stmnt FROM 'SELECT myColumns FROM myTable WHERE ?';

然后,您可以在 where 子句中设置一个变量来匹配您想要的内容,并使用 USING 关键字执行语句:

SET @condition = 'a1 < b1';
EXECUTE stmnt USING @condition;

注意准备语句中 ? 的使用。这是参数所在位置的占位符。如果您有多个问号,您将需要在 USING 之后有多个参数,它们会按照您编写的顺序替换问号。

关于mysql - 在查询中包含可重复使用的文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768984/

相关文章:

mysql - 在单个 MySQL 列中分隔标签

mysql - 添加依赖项以生成文件 C++

sql - 创建作为常数值的季节和年份列表

sql - 根据用户数据显示相关歌曲

mysql - 多个表上的 SQL 请求

java - 准备语句 setString 添加不必要的单引号到字符串

java - 空连接变量

mysql - 收到错误 1451 (23000) : Cannot delete or update a parent row: a foreign key constraint fails

mysql - 连接2个表时如何按2列排序?

php - SQLite3 PHP "Update"- 准备好的查询的结果