在Oracle SQL中,如何使用多值列连接表

MFI*_*san 3 sql oracle

我们的Oracle数据库中有一个遗留表,它有一个以逗号分隔值的列.这些以逗号分隔的值实际上是另一个表的外键.

Table: SCHEDULE
-----------------------
ID    NAME     DATES
--    ----     -----
1     Test1    10,20,30
2     Test2    20,40

Table: DATES
-----------------------
ID    DATE
--    ----
10    2013-01-01
20    2013-02-02
30    2013-03-03
40    2013-04-04
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个返回结果的查询:

ID   NAME   DATE
--   ----   ----
1    Test1  2013-01-01
1    Test1  2013-02-02
1    Test1  2013-03-03
2    Test2  2013-02-02
2    Test2  2013-04-04
Run Code Online (Sandbox Code Playgroud)

我遇到了DBMS_UTILITY.comma_to_table过程,以及REGEXP_SUBSTR,SPLIT,JOIN等函数.但是我无法实现这一点.这里有什么帮助?

Gor*_*off 5

Yuch.但有时你必须处理这个问题.在Oracle中,您可以使用like以下join条件:

select s.id, s.name, d.date
from schedule s join
     dates d
     on ',' || dates || ',' like '%,' || d.id || ',%';
Run Code Online (Sandbox Code Playgroud)

这效率不高,不会使用索引.但它应该解决你的问题.

注意使用分隔符','.这可以防止10匹配100.