在查询中包含可重复使用的文本块
Include a re-usable text block in query
我正在寻找一种解决方案来创建一个单独的文本块(由某些条件组成),我可以只创建一次并稍后在查询中引用它:
示例:
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
后面有多个参数,它们会按照你写的顺序替换问号。
我正在寻找一种解决方案来创建一个单独的文本块(由某些条件组成),我可以只创建一次并稍后在查询中引用它:
示例:
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
后面有多个参数,它们会按照你写的顺序替换问号。