查询从动态表列表中选择公共字段

时间:2011-04-24 14:31:32

标签: mysql sql

我有一个我在MySQL创建的1分钟股票价格的数据库。设置数据库,以便每个库存都有自己的表,其名称由包含日期,打开,高,低,关闭,体积的符号命名。还有一个名为符号的表,其中包含符号,类型。数据库的最终目标是能够从一组符号中获取一系列日期的价格。

此查询适用于从符号表中选择符号子集:

SELECT symbol 
FROM minute.symbols 
WHERE type = 'ETFs';

此查询适用于从单个股票中选择日期的子集:

SELECT 'SPY', date, close 
FROM minute.SPY 
WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00';

此查询适用于从两只股票中选择常见价格:

(SELECT 'SPY', date, close 
 FROM minute.SPY 
 WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00'
) 
UNION 
(SELECT 'QQQQ', date, close 
 FROM minute.QQQQ 
 WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00'
)

我希望能够将查询#1和查询#2组合到一个查询中以获得类似查询#3的结果,但是对于查询#1返回的所有表。

这是可行和有效的,还是我应该动态构建查询#3,这可能导致100%的UNIONS?

1 个答案:

答案 0 :(得分:0)

您可以使用存储过程来实现此目的。

  • 您可以将类型和日期范围作为参数传递。
  • 您可以在第一个表(符号)上运行光标
  • 循环游标并在Concat的帮助下构建SQL字符串
  • 最后,当您构建了查询时,您可以使用Prepare和Execute来运行它