mysql - 将Mysql中的静态查询转换为动态
问题描述
我在理解 Mysql 中的动态查询时遇到了一些问题。我需要将我的示例查询从静态转换为动态。在示例中,我有 2 个模式,并且我已经知道名称。但是如果我不知道模式的名称和编号,我需要创建一个可以工作的动态查询。我能得到关于如何做或我需要学习什么的提示吗?
SELECT MIN(tmp.DATE47) as DATE47,
MIN(tmp.HOUR47) as HOUR47,
MIN(tmp.DATE49) as DATE49,
MIN(tmp.HOUR49) as HOUR49
FROM (SELECT DATEIN AS DATE47, HOURIN AS HOUR47, NULL AS DATE49, NULL AS HOUR49
FROM `schema1`.`table` WHERE STATE = 17 AND LEVEL = 1
UNION ALL
SELECT NULL AS DATE47, NULL AS HOUR47, HOURIN AS DATE49, HOURIN AS HOUR49
FROM `schema2`.`table` WHERE STATE = 17 AND LEVEL = 1)tmp
解决方案
关于准备好的语句的快速示例:
SET @statement = 'SELECT MIN(tmp.DATE47) as DATE47,
MIN(tmp.HOUR47) as HOUR47,
MIN(tmp.DATE49) as DATE49,
MIN(tmp.HOUR49) as HOUR49
FROM (SELECT DATEIN AS DATE47, HOURIN AS HOUR47, NULL AS DATE49, NULL AS HOUR49
FROM `schema1`.`table` WHERE STATE = 17 AND LEVEL = 1
UNION ALL
SELECT NULL AS DATE47, NULL AS HOUR47, HOURIN AS DATE49, HOURIN AS HOUR49
FROM `schema2`.`table` WHERE STATE = 17 AND LEVEL = 1)tmp;'
PREPARE stmt FROM @statement;
现在您可以使用此语句来查询schema1
和schema2
:
EXECUTE stmt;
如果您需要使用 ieschema3
并schema2
执行以下操作:
DEALLOCATE PREPARE stmt;
PREPARE stmt FROM REPLACE(@statement,'schema1','schema3');
并开始做:EXECUTE stmt;
再次......
当然,这将在存储过程中更有效地处理。
推荐阅读
- java - JavaFX - 后台线程上的 javafx.beans.property 更新
- google-cloud-platform - 将设备从一个注册表复制到另一个 Google IoT Core
- android - 在 Android 7(root)上,libusb_init 失败并显示 LIBUSB_ERROR_OTHER
- swiftui - 在 SwiftUI 中更轻松或更紧凑地实现等待代码
- postgresql - postgresql 数据库的所有者
- testing - 找不到 appium ID,因为所有 ID 都显示为正方形
- python - Python函数月份范围
- r - ggplot - 使用箭头在末尾标记每一行
- google-apps-script - 在 Google 表格中创建顺序自动生成 ID 的公式
- ios - VStack中的SwiftUI不同的对齐文本