【问题标题】:How to select from dynamic table name如何从动态表名中进行选择
【发布时间】:2012-05-15 20:43:16
【问题描述】:

我有这样的桌子

changes201101
changes201102
changes201103
...
changes201201

还有桌子 whichchanges 其中包含行 Year 和 MONTH

如何从 whichchanges 的更改中选择 *?

我输入这个查询

SET @b := SELECT CONCAT('changes',year,month) FROM whichchanges;
((((@b should contain now multiple rows of changesYearMonth)))))
SET @x := SELECT * FROM @b;
Prepare stmt FROM @b;
Prepare stmt FROM @x;
Execute stmt;

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'SELECT CONCAT('changes',year,month) FROM changes)' 附近使用正确的语法

【问题讨论】:

  • 看起来您编辑了您的问题。现在查询不再适合您的错误消息。

标签: mysql select dynamic


【解决方案1】:

您打开 1 个 ( 并关闭 2 个 )。删除最后一个:

SELECT CONCAT('changes',year,month) FROM changes

编辑

第二个语句应该是

SET @x := SELECT * FROM (@b) as b;

这可行,但不确定这是否是您想要的:

SET @b := 'SELECT CONCAT(''changes'',`year`,`month`) FROM whichchanges';
SET @x := 'SELECT * FROM (SELECT CONCAT(''changes'',`year`,`month`) FROM whichchanges) as b';
Prepare stmt FROM @b;
Prepare stmt FROM @x;
Execute stmt;

编辑2

如果我理解正确,您正在寻找单个查询:

select * from changes
where change_column in (select distinct concat(`year`, `month`) from whichchanges)

编辑3

select @b := group_concat(concat(' select * from changes', `year`, `month`, ' union ') separator ' ') as w from whichchanges;
set @b := left(@b, length(@b) - 6);

Prepare stmt FROM @b;
Execute stmt;

SQLFiddle example

【讨论】:

  • SET @b = SELECT CONCAT('change',year,month) FROM whichchanges; SET @x := SELECT * FROM (@b); Prepare stmt FROM @b; Prepare stmt FROM @x; Execute stmt; #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT CONCAT('changes',year,month) FROM whichchanges' at line 1
  • 如果我使用"SET @b = (SELECT CONCAT('changes',year,month) FROM whichchanges);" **#1242 - Subquery returns more than 1 row ** 如果我使用SET @b = (SELECT CONCAT('changes',year,month) FROM whichchanges LIMIT 1); #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“SELECT * FROM (@b)”附近使用正确的语法
  • 我希望这会有所帮助i.imgur.com/hni0g.jpg 如果没有,我将使用 PHP 来完成
  • @jurgen-d,是的,它必须在一个查询中,但您的查询中的“change_column”是什么?我认为查询应该类似于“select * from changes where changes in (select distinct concat('changes ',yer, month) from whichchanges)”#1146 - Table 'database.changes' 没有'不存在
  • @breq:查看我上次更新的this 示例。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多