2013-02-09 61 views
0

我正在通過帶有遊標的數據集運行。 在每個遊標傳遞中,使用存儲過程將一個字符串拆分,該存儲過程將單個元素寫入臨時表SplitValues,每行一個值。每個數據集還具有唯一的ID ds_id從子查詢中的第二個表訪問值

SplitValues

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

我也有具有用於每個項目的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  | 

這應該是相當簡單的,但我失敗了。我做了多次嘗試,一個是下面的遊標循環:

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'

我尋覓了很多,想我的問題是主題相關的別名,但無法找到一個解決方案。

回答

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

+0

這就像一個魅力 - 謝謝! – leepfrog 2013-02-09 13:49:08

相關問題