sql - 在 Oracle SQL 中,如何连接具有多值列的表

标签 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

我正在尝试编写一个会返回类似以下结果的查询:

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/

相关文章:

sql - 返回带有 union all 的查询结果,其顺序与我的 `IN(…)` 语句中的值相同

database - 为什么Oracle数据库按区间创建分区时要求至少提供单个分区

oracle - CTE(与表为)在Hive中等效于SQL Server?

mysql - 关于重复数据的SQL

mysql - SQL - 获取带有条件的每个不同值的计数?

oracle - "Missing ( keyword"在Oracle 12c中创建具有列标识的表时

java - 如何使用 jxls 上传和更新集 DB .xls 或 .xlsx 文件

SQL - 使用 LEFT OUTER JOIN 计数不正确

php - 某些账单详细信息页面的重度用户会出现延迟

sql - sql中的条件xml