Как сделать расщепление и левое соединение в оракуле

Я работаю с жабой для оракула, и у меня есть база данных с несколькими ассоциациями (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
Другие вопросы по тегам