像往常一样,这是一个非常简单的问题。
我有一个有主键的表。问题是这个主键有时是一个由逗号分隔的唯一 ID 列表(例如:1、2、3)。
我想对该表执行 SELECT,但我想每行查看一个 ID。这是一个更直观的简单示例!
表中数据:
1,2,3 Info1 Info2
我想要 SELECT 查询输出:
1 Info1 Info2
2 Info1 Info2
3 Info1 Info2
假设这是 Oracle:
WITH CTE
AS (SELECT
'1,2,3' AS COL1,
'Info1' AS COL2,
'Info2' AS COL3
FROM
DUAL)
SELECT
REGEXP_SUBSTR ( COL1,
'[^,]+',
1,
RN )
COL1,
COL2,
COL3
FROM
CTE
CROSS JOIN
(SELECT
ROWNUM RN
FROM
(SELECT
MAX ( LENGTH ( REGEXP_REPLACE ( COL1,
'[^,]+' ) ) )
+ 1
MAX_L
FROM
CTE)
CONNECT BY
LEVEL <= MAX_L)
WHERE
REGEXP_SUBSTR ( COL1,
'[^,]+',
1,
RN )
IS NOT NULL
ORDER BY
COL1;
结果:
1 Info1 Info2
2 Info1 Info2
3 Info1 Info2