TABLE_A
CARGO - HELPERS
250 - 125|126|5|...(AS MANY AS THEY ARE ASSIGNED ON THE PROGRAM)
TABLE_B
ID - NAME
5 - JAKE
125 - JOSH
126 - MEGAN
9001 - VEGETA
10 - SPANISH INQUISITION
我如何加入表A和B来获得所有帮助过货物的人?
我需要编写一个函数吗?
我没有开发该程序。我正在创建一个仪表板,需要该信息。
使用ORACLE 11g DB
结论---已解决
经过一些朋友的研究和帮助,我能够获得在我的情况下可以使用的SQL。
SELECT CARGO, HELPERS
FROM TABLE_A
INNER JOIN table_b B ON B.ID IN (SELECT regexp_substr(HELPERS,'[^|]+', 1, level)
FROM dual
CONNECT BY regexp_substr(HELPERS,'[^|]+', 1, level) IS NOT NULL)
使用正则表达式获取所有内容,直到第一个|
,然后继续进行直到找不到另一个管道为止。解释不正确,但可以为您提供帮助。
从某种意义上讲,这很容易:
...
from table_a a join table_b b
on '|' || a.helpers || '|' like '%|' || b.id || '|%'
...
但是,正如我在关于您的问题的评论中所说,更好的方法是修复数据模型(如果它在您的能力范围内)。您的TABLE_A不在“第一范式”中。难怪您很难编写此(简单的)联接。对于较少的琐碎任务,您会感到更加痛苦,更不用说执行缓慢,无法检查“帮助者”的有效性,等等。