从子查询中的第二个表中访问值

时间:2013-02-09 03:44:42

标签: mysql

我正在使用光标运行数据集。 在每个游标传递中,使用存储过程将字符串拆分,该存储过程将单个元素写入临时表SplitValues,每行一个值。每个数据集还具有唯一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        |

这应该相当简单,但我失败了。我做了多次尝试,一次是以下游标循环:

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'

我经常搜索并认为我的问题与别名有关但无法找到解决方案。

1 个答案:

答案 0 :(得分: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