在查询中包含可重复使用的文本块

时间:2015-02-27 15:47:28

标签: mysql sql prepared-statement reusability

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

示例:

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多个表,我需要从中获取对应于此可重用文本块中定义的相同精确条件的数据。如果我需要进行更改,它将仅适用于此可重复使用的文本块。

我如何设计这个以便我只需要在一个地方进行更改,而不是每次查询一次?

1 个答案:

答案 0 :(得分:1)

此处您需要解决的问题是Prepared Statement

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

在您的情况下,如果您想要一个参数化的where子句,您可以这样做:

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

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

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

请注意在预准备语句中使用?。这是参数所在位置的占位符。如果您有多个问号,则需要在USING后面加上多个参数,并按照您编写的顺序替换问号。