SQL - соединение с ключами, разделенными трубой - PullRequest
0 голосов
/ 20 апреля 2020

TABLE_A

 CARGO - HELPERS
 250 - 125|126|5|...(AS MANY AS THEY ARE ASSIGNED ON THE PROGRAM)

TABLE_B

 ID - NAME
 5 - JAKE
 125 - JOSH
 126 - MEGAN
 9001 - VEGETA
 10 - SPANISH INQUISITION

Как я могу присоединиться к таблицам A и B, чтобы получить всех, кто помогал в машине go?

Нужно ли мне писать функцию?

Я не разрабатывал программу. Я создаю информационную панель и мне нужна эта информация.

Использование ORACLE 11g DB

ЗАКЛЮЧЕНИЕ --- РЕШЕНО

Через некоторое время исследование и помощь друзей Я смог получить SQL, который работал в моем случае.

SELECT CARGO, HELPERS
FROM TABLE_A
INNER JOIN table_b B ON B.ID IN (SELECT regexp_substr(HELPERS,'[^|]+', 1, level) 
                                 FROM dual 
                                 CONNECT BY regexp_substr(HELPERS,'[^|]+', 1, level) IS NOT NULL) 

Использование регулярных выражений, чтобы получить все до первого |, затем продолжить, пока не могу найти другая труба. Не правильное объяснение, но может помочь вам.

1 Ответ

1 голос
/ 20 апреля 2020

В некотором смысле это легко:

...
from table_a a join table_b b 
               on '|' || a.helpers || '|' like '%|' || b.id || '|%'
...

Но, как я сказал в комментарии к вашему вопросу, лучшим подходом было бы исправить вашу модель данных (если она в ваших силах). Ваш TABLE_A не находится в первой нормальной форме. Неудивительно, что вам было трудно написать это (тривиальное) соединение; Вы будете чувствовать гораздо больше боли для менее тривиальных задач, не говоря уже о медленном выполнении, отсутствие возможности проверить действительность «помощников» и т. д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...