5

私は次のようなテーブルを持っています

changes201101
changes201102
changes201103
...
changes201201

whichchanges年と月の行を含むテーブル

からの変更から * を選択するにはどうすればよい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;

#1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'SELECT CONCAT('changes',year,month) FROM changes)' 付近で使用する正しい構文を確認してください。

4

1 に答える 1

7

1を開き(、2を閉じ)ます。最後を削除します:

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

編集

2番目のステートメントはおそらく

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

それは機能しますが、それがあなたが望むものであるかどうかはわかりません:

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

私があなたを正しく理解していれば、あなたはその単一のクエリを探しています:

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の例

于 2012-05-07T10:26:24.037 に答える