我们的 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
我正在尝试编写一个会返回类似以下结果的查询:
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
我遇到了 DBMS_UTILITY.comma_to_table 过程,以及 REGEXP_SUBSTR、SPLIT、JOIN 等函数。但我无法实现这一点。这里有什么帮助吗?
最佳答案
是的。但有时你必须处理这个问题。在 Oracle 中,您可以使用 like
作为 join
条件:
select s.id, s.name, d.date
from schedule s join
dates d
on ',' || dates || ',' like '%,' || d.id || ',%';
这是不高效的,它不会使用索引。但它应该可以解决您的问题。
请注意分隔符 ','
的使用。这可以防止 10
匹配 100
。
关于sql - 在 Oracle SQL 中,如何连接具有多值列的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24706810/