Oracle - 检索另一个表

时间:2015-11-18 17:39:49

标签: sql oracle

我目前正在寻找为我的软件实现功能的最佳方法。 我使用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中)。

谢谢!

1 个答案:

答案 0 :(得分:3)

首先,设计不是很好。您希望将组件存储在此类

    ID,  component
     1,     A
     1,     B
     1,     C

所以你的查询可以使用索引

让我们假设您的组件类似于A;B;C

Sql Fiddle Demo

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 |