Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment sélectionner un nom de table dynamique

Vous ouvrez 1 ( et fermer 2 ) . Supprimer le dernier :

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

Modifier

la deuxième instruction devrait probablement être

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

Cela fonctionne, mais je ne sais pas si c'est ce que vous voulez :

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;

Modifier2

Si j'ai bien compris, vous recherchez cette requête unique :

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

Modifier3

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;

Exemple SQLFiddle