Как сделать расщепление и левое соединение в оракуле
Я работаю с жабой для оракула, и у меня есть база данных с несколькими ассоциациями (1-н). Я хочу связать столбец varchar (пример:1,2,3) в таблице со столбцом int (id)(пример: 1) другой таблицы. Я создаю представление для этой операции в базе данных, но внешнее применение и перекрестное применение не работают.
Также не работает в команде dbo.split, найденной в sql.
Как это можно сделать?
SELECT
a.ID AS ID,
a.ADI_NUMARASI AS aNAME,
c.ID AS CODEID,
c.VALUE AS cVALUE
FROM CUSTOMER a OUTER APPLY [dbo].[Split](a.TypeIDs, ',') Types
LEFT JOIN CODE c ON c.ID= Types.Item AND c.DOMAINID = a.DOMAINID
Примеры таблиц
table CUSTOMER table CODE
ID | ADI_NUMARASI | TYPEIDS |DOMAINID ID | DOMAINID | VALUE
1 TEST1 1,2,3 1 1 1 XXX
2 1 YYY
3 2 ZZZ
3 1 KKK
ожидаемый результат
ID | aNAME | CODEID | cVALUE
1 TEST1 1 XXX
1 TEST1 2 YYY
1 TEST1 3 KKK
2 ответа
Решение
Пытаться:
SELECT cu.ID , cu.ADI_NUMARASI , co.ID , co.VALUE
FROM
(
SELECT id,ADI_NUMARASI,TYPEIDS,DOMAINID,
regexp_substr(TYPEIDS,'[^,]+', 1, level) typeidsnew
FROM Customer
GROUP BY id,ADI_NUMARASI,TYPEIDS,DOMAINID,
regexp_substr(TYPEIDS, '[^,]+', 1, level)
connect by regexp_substr(TYPEIDS, '[^,]+', 1, level) is not null
) cu
LEFT JOIN Code co ON cu.typeidsnew = co.ID
AND cu.DomainId = co.domainId
ORDER BY cu.ID,co.ID
Вывод: http://sqlfiddle.com/
Вы можете попробовать это
WITH splitedValues as (SELECT TRIM(REGEXP_SUBSTR(TYPEIDS, '[^,]+', 1, level)) as TYPEID
, ADI_NUMARASI
, DOMAINID
FROM CUSTOMER
CONNECT BY level <= REGEXP_COUNT(TYPEIDS, '[^,]+'))
select *
from splitedValues s
join code c on s.TYPEID = c.id and s.domainid = c.domainid