我目前正在寻找实现软件功能的最佳方式。我使用Oracle Stored Procedures
来检索材料列表,其中一个子句是搜索我的材料的字段是否包含另一个表的字符串之一。
例如:
我有一张表格,里面有这样定义的材料:
ID、名称、组件
还有一个定义如下的组件表:
ID,组件
我想检索每个材料,其中组件至少包含在表组件中定义的一个组件中。
不知道我是否很清楚,但由于我对数据库语言和Oracle还很陌生,我尽了最大努力:)
非常感谢!
编辑
部分样品:
表组件:
ID| COMPONENT
_____________
1 | 'TOTO 42'
2 | 'TEST'
3 | 'TEST42'
4 | 'COMP1'
5 | 'CONTROL 25'
表材料:
ID| NAME | COMPONENTS
__________________________
1 | 'MAT1' | 'TOTO 42;TEST'
2 | 'MAT2' | 'CPTX'
3 | 'MAT3' | 'AZER;TYUO'
4 | 'MAT4' | 'PL;MLX;23'
5 | 'MAT5' | 'CONTROL 25;COMP1;MLX'
我希望对Material表进行查询,只返回MAT1和MAT5(因为它们的一个组件在Component表中)。
谢谢!
首先,设计不是很好。你想把化合物储存在这种中
ID, component
1, A
1, B
1, C
所以您的查询可以使用索引
假设您的组件类似于A;B;C
Sql Fiddle演示
SELECT DISTINCT m.ID, m.NAME
FROM MATERIALS m
JOIN COMPONENT c
ON ';' || UPPER(m.COMPONENTS) || ';' LIKE '%;' || UPPER(c.Component) || ';%'
输出
| ID | NAME |
|----|------|
| 5 | MAT5 |
| 1 | MAT1 |