Reputation: 25506
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
Upvotes: 6
Views: 15550
Reputation: 204746
You open 1 (
and close 2 )
. Remove the last:
SELECT CONCAT('changes',year,month) FROM changes
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;
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)
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;
Upvotes: 7