【发布时间】:2013-04-18 09:50:00
【问题描述】:
我有如下列的表格:
员工:
Id number(10),
Name varchar2(10)
部门:
Id number(10),
Name varchar2(10),
Emp_ids varchar2(10)
表格中的值分别是:
员工:
1,abc,111
2,def,222
3,xyz,333
部门:
111,development,'1,2'
222,testing,'2,3'
我的问题是我需要使用 Department 表中的 emp_ids 列选择员工姓名。
例子:
SELECT names FROM employee
WHERE id in (SELECT emp_ids FROM department WHERE name = 'development');
由于emp_ids 是varchar2 数据类型,我无法执行上述命令。
注意:由于我使用 Activerecord Base Connection 从 Ruby 连接我的 Oracle DB,因此我也在标签中包含了 ruby。
【问题讨论】:
-
当你运行代码
SELECT names FROM employee WHERE id in (SELECT emp_ids FROM department WHERE name = 'development');时,你得到了什么? -
我面临数据类型不匹配错误:ORA-01722: invalid number
-
那是因为 '1,2' 是一个字符串,不是一个有效的数字。基本上,您有一个 CSV,您需要将其拆分为单独的令牌。有 loads 的示例说明如何在 SO 上执行此操作。查看建议的副本以了解解决方法。
-
顺便说一句,像这样存储值是一个非常糟糕的主意。甚至比嵌套表列更糟糕。使用关系方法,例如交集表,或使用标准解决方案:DEPT_ID 作为 EMPLOYEE 上的外键。
标签: ruby oracle rubygems oracle10g oracle11g