How to select from dynamic table name

dynamic, mysql, select

Solution

You open 1 `(` and close 2 `)`. Remove the last:

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

Edit

the second statement should probably be

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

That works, but not sure if that is what you want:

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;

Edit2

If I understood you right you are looking for that single query:

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

Edit3

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

Problem

I have tables like ``` changes201101 changes201102 changes201103 ... changes201201 ``` And table `whichchanges` which contain rows Year and MONTH How I can select * from changes from `whichchanges`? I type this query ``` 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 - 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 changes)' at line 1

Original source