How to select from dynamic table name

后端 未结 1 1595
猫巷女王i
猫巷女王i 2020-12-06 19:44

I have tables like

changes201101
changes201102
changes201103
...
changes201201

And table whichchanges which contain rows Year

相关标签:
1条回答
  • 2020-12-06 20:26

    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

    0 讨论(0)
提交回复
热议问题