长时间用户,第一次海报。
我有两张桌子;
a1_watchlists {id(PK),name,date}
a1_watchlist {id(PK),watchlists_id(FK(a1_watchlists.id)),company_name,asx_code,date}
我还有2000个其他表格,这些表格的名称是' asx _' + [asx_code](其中asx_code是从另一个表中提取的)
这张桌子看起来像; asx_ [asx_code] {date(PK),open,high,low,close,volume}
我想从a1_watchlists和a1_watchlist中选择所有内容,然后使用a1_watchlist.asx_code中的值从asx_ [asx_code]表中选择最新日期,以生成表名的[asx_code]部分。
我遇到的问题是我想使用a1_watchlist.asx_code中的值作为表名前面的字符串' asx _'第一个。
我能得到的最近的是;
DECLARE @TableName VARCHAR(100)
SELECT *
FROM a1_watchlist AS wl
JOIN a1_watchlists AS wls
ON wls.id = wl.watchlists_id
SET @TableName = 'asx_' + wl.asx_code
INNER JOIN (SELECT MAX(date),open,high,low,close,volume,amount_change,percent_change FROM @TableName)
目前提供错误:
SELECT *
FROM a1_watchlist AS wl
' at line 1
我在最终结果中需要的预期列将是:
wl.id,wl.watchlists_id,wl.company_name,wl.asx_code,asx_ [asx_code] .date,asx_ [asx_code]。开,asx_ [asx_code]。高,asx_ [asx_code]。低,asx_ [asx_code ] .close,asx_ [asx_code] .volume
如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
如果你有2000多张桌子以asx +一些代码开头......(我住在一座有多座桥梁的小镇),甚至不管你是什么,我都不会谈论该怎么办? 39;重新做是最好的方式去你想去的地方。但是,它确实看起来像是在尝试将事物连接在一起并创建动态语句。如果这听起来是正确的,那么我建议您查看准备好的陈述。如下所示。希望这会有所帮助。
DELIMITER $$
DROP PROCEDURE IF EXISTS prRetrieveAllFromTable$$
CREATE PROCEDURE prRetrieveAllFromTable(tableName VARCHAR(64))
BEGIN
SET @s = CONCAT('SELECT * FROM ',tableName );
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
CALL prRetrieveAllFromTable('calendar');
http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-prepared-statements.html