Do not store the values as a string list.
Either use a collection and the MEMBER OF
operator:
SQL Fiddle
Oracle 11g R2 Schema Setup:
CREATE TYPE IntList IS TABLE OF INTEGER
Query 1:
WITH TB1 ( ID ) AS (
SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 3 FROM DUAL
),
TB2 ( names, idref ) AS (
SELECT 'A', IntList( 1,2 ) FROM DUAL
)
SELECT t1.*,
t2.Names
FROM TB1 t1
join tb2 t2
on t1.id MEMBER OF t2.idref
Results:
| ID | NAMES |
|----|-------|
| 1 | A |
| 2 | A |
Or separate your list into its own table so that you can properly reference the foreign keys of TB1
:
Query 2:
WITH TB1 ( ID ) AS (
SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 3 FROM DUAL
),
TB2 ( names ) AS (
SELECT 'A' FROM DUAL
),
TB3 ( names, idref ) AS (
SELECT 'A', 1 FROM DUAL UNION ALL
SELECT 'A', 2 FROM DUAL
)
SELECT t1.*,
t2.Names
FROM TB1 t1
join tb3 t3
on t1.id = t3.idref
join tb2 t2
on t2.names = t3.names
Results:
| ID | NAMES |
|----|-------|
| 1 | A |
| 2 | A |