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

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多个表,需要从中获取与此可重用文本块中定义的完全相同的条件对应的数据。如果需要更改,它将只应用于此可重用文本块。
我如何设计这个,以便只需要在一个地方进行更改,而不是每次查询一次?

最佳答案

你需要在这里解决你的问题是一个Prepared Statement
这允许您创建一个要运行多次的查询,同时只更改一些最小的内容,例如列条件。
在您的例子中,如果您想有一个参数化的where子句,您可以这样做:

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

然后,可以设置一个变量来匹配where子句中所需的内容,并使用USING关键字执行语句:
SET @condition = 'a1 < b1';
EXECUTE stmnt USING @condition;

注意在准备好的语句中使用?。这是参数的位置的占位符。如果有多个问号,则需要在USING后面有多个参数,这些参数将按编写顺序替换问号。

10-01 15:40