0

カーソルを使用してデータセットを実行しています。SplitValues各カーソルパスで、文字列は、行ごとに1つの値で、一時テーブルに単一の要素を書き込むストアドプロシージャを使用して分割されます。各データセットには一意のIDもありますds_id

SplitValues

value   |
--------+
Item1   | 
Item2   | 
Item3   | `

また、split関数が生成する可能性のある各アイテムのIDを持つ参照テーブルもあります。

クラス

id | class |
---+--------
5  | Item1 |
6  | Item2 |
7  | Item3 |
8  | Item4 |
9  | Item5 |

私が今やりたいのはSplitValues、データを格納するためにのすべての行を調べてテーブルに書き込むことですが、ストレージを節約するためにクラス自体ではなくクラスのIDを使用します。

ストレージ

ds_id | class_id |
------+-----------
0     | 5        |
0     | 6        |
0     | 7        |

これはかなり単純なはずですが、私は失敗しています。私は複数の試みをしました、1つは次のカーソルループでした:

FETCH cur1 INTO ds_id, string;
CALL `Split_String`(string, ',');

INSERT INTO storage (ds_id, class_id) 
    SELECT ds_id, 
        (SELECT classes.id FROM classes WHERE class = SplitValues.value ) as class_id ;

[...]

エラーが発生しましたUnknown column 'SplitValues.value' in 'where clause'

私はたくさん検索しましたが、私の問題は何らかの形でエイリアスに関連していると思いますが、解決策を見つけることができませんでした。

4

1 に答える 1

0

これを試して

[...]
INSERT INTO storage (ds_id, class_id) 
SELECT ds_id, c.id
  FROM classes c INNER JOIN 
       SplitValues s ON c.class = s.value
[...]

これがsqlfiddleです

于 2013-02-09T04:00:44.253 に答える