我的表格列如下:
员工:
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。
答案 0 :(得分:2)
您的数据模型设计不当。你可以构建一个可行的查询,但它会是:
我建议你使用可靠的数据模型。你有一个N-N关系,需要三个表:
Employee (Id number(10) primary key, Name varchar2(10))
Department (Id number(10) primary key,Name varchar2(10))
Employee_department (
emp_id number(10) references employee (id),
dep_id number(10) references department(id),
constraint pk_emp_dept primary key (emp_id, dep_id)
)
然后您的查询将完美无缺,高效工作,您不会在晚上因数据不一致而失眠。
SELECT names
FROM employee
WHERE id in (SELECT ed.emp_id
FROM department d
JOIN employee_department ed ON d.id = ed.dep_id
WHERE d.name = 'development');
作为数据库开发人员,您的两个主要目标是:
答案 1 :(得分:0)
我建议你改变你的桌面结构。
<强>员工:强>
id
name
dept_id
<强>系:强>
id
name