gpt4 book ai didi

MySQL在Join语句中创建动态表名

转载 作者:行者123 更新时间:2023-11-29 12:24:19 25 4
gpt4 key购买 nike

长期用户,第一次发帖。

我有 2 张 table ;

a1_watchlists {id(PK),名称,日期}

a1_watchlist {id(PK),watchlists_id(FK(a1_watchlists.id)),company_name,asx_code,date}

我还有 2000 个使用名称“asx_”+[asx_code] 创建的其他表(其中 asx_code 是从另一个表中提取的)

这张表看起来像;asx_[asx_code] {日期(PK),开盘价,最高价,最低价,收盘价,交易量}

我想从 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)

当前出现错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“DECLARE @TableName VARCHAR(100)

”附近使用的正确语法
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].open、asx_[asx_code].high、asx_[asx_code].low、asx_[asx_code] ].close,asx_[asx_code].volume

如果您需要更多信息,请告诉我。

最佳答案

我不会谈论如果你有 2000 多个以 asx+ 一些代码开头的表该怎么办...(我住在一个有多个桥梁的城镇),甚至不会谈论你在做什么是到达您想去的地方的最佳方式。但是,看起来您确实正在尝试将事物连接在一起并创建动态语句。如果这听起来不错,那么我建议您查看准备好的声明。就像下面这样。希望这会有所帮助。

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

How To have Dynamic SQL in MySQL Stored Procedure

关于MySQL在Join语句中创建动态表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28572140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com