我目前正在寻找为我的软件实现功能的最佳方法。
我使用Oracle Stored Procedures
来检索材料列表,一个子句是搜索我的材料的字段是否包含另一个表的字符串之一。
例如:
我有一个表格,其中的材料定义如下:
ID,名称,组件
一个如下定义的组件表:
ID,组件
我想检索组件包含在表Component中定义的至少一个组件中的每个材料。
不知道我是否非常清楚,但由于我对数据库语言和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'
我想对表材质进行查询,只返回MAT1和MAT5(因为其中一个组件位于表Component中)。
谢谢!
答案 0 :(得分:3)
首先,设计不是很好。您希望将组件存储在此类
中 ID, component
1, A
1, B
1, C
所以你的查询可以使用索引
让我们假设您的组件类似于A;B;C
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 |