2016-09-08 2 views
0

У меня есть 2 таблицы: ПРОФЕССОР и СТУДЕНТ. Оба имеют столбцы LEVEL, которые содержат значение «,» с разделителем. Если у меня есть СТУДЕНТ, как я могу написать запрос, чтобы вернуть все соответствия PROFESSORs, по крайней мере, 1 STUDENT.LEVEL?Oracle Присоединиться к разделительной строке

Например:

STUDENT[1].LEVEL = '1,2' 
PROFESSOR[1].LEVEL = '2, 3' 
PROFESSOR[2].LEVEL = '2, 4' 

Я хочу вернуться и ПРОФЕССОР 1 и 2.

+0

Итак, для ученика 1 вы хотите вернуть 2, 3 и 4 ...? Или вы 1 и 2? Кажется, у вас уже есть 1 и 2 – kbball

+0

Я хочу вернуть PROFESSOR [1] и PROFESSOR [2]. – topcan5

+0

Но у вас уже есть это в student.level ..? Правильно? Итак, что бы сделал запрос? – kbball

ответ

1

Как D Стэнли сказал, что нужно нормализовать данные. Но в любом случае у вашей проблемы есть решение. Используйте REPLACE для очистки данных и REGEXP для соединения.

-- data for example 
WITH 
student AS (
SELECT 'Jon' AS "name", '1,2' AS "level" FROM dual UNION ALL 
SELECT 'Bob' AS "name", '1,5' AS "level" FROM dual 
), 
professor AS (
SELECT 'M.Fowler' AS "name", '2, 3' AS "level" FROM dual UNION ALL 
SELECT 'E.Gamma' AS "name", '2, 4' AS "level" FROM dual 
) 
-- query 
SELECT s.*, p.* 
    FROM student s, 
     professor p 
WHERE REGEXP_LIKE(p."level", REPLACE(REPLACE(s."level",' ', ''), ',', '|')) 
Смежные вопросы