bre*_*req 5 mysql select dynamic
我有桌子
changes201101
changes201102
changes201103
...
changes201201
Run Code Online (Sandbox Code Playgroud)
并且
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;
Run Code Online (Sandbox Code Playgroud)
#1064 - 您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行'SELECT CONCAT('更改',年,月)FROM更改'附近使用正确的语法
你打开1 (并关闭2 ).删除最后一个:
SELECT CONCAT('changes',year,month) FROM changes
Run Code Online (Sandbox Code Playgroud)
第二个陈述应该是
SET @x := SELECT * FROM (@b) as b;
Run Code Online (Sandbox Code Playgroud)
这有效,但不确定这是否是你想要的:
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;
Run Code Online (Sandbox Code Playgroud)
如果我理解你正确,你正在寻找那个单一的查询:
select * from changes
where change_column in (select distinct concat(`year`, `month`) from whichchanges)
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)