Это не сработает, потому что (12,24)
- это отдельная дискретная строка, а не разделенный запятыми набор чисел. Ясно, что 12 != '(12,24)'
, следовательно, результаты не возвращаются.
редактировать
Я пропустил внешнее объединение в вашем опубликованном запросе. Таким образом, вы должны вернуть что-то , даже если между двумя таблицами нет соединения. Вот некоторые тестовые данные:
SQL> select * from names
2 /
ID_A ID_B NAME
---------- ---------- ----------
1 12 SAM
SQL> select * from surnames
2 /
ID_A ID_B SURNAME
---------- ---------- ----------
1 24 I-AM
SQL> select * from whatever
2 /
ID SECOND_NAM
---------- ----------
24 I AM SAM
SQL>
Мой запрос похож на ваш, за исключением того, что я приведу b.id
в виде строки, потому что a.ids
- это строка. Если я этого не сделаю, запрос завершится с ORA-1722: invalid number
.
SQL> select * from
2 (
3 select n.id_b || ',' || s.id_b ids, n.name, s.surname
4 from names n,
5 surnames s
6 where n.id_a = s.id_a
7 ) a
8 left join
9 (
10 select sn.id, sn.second_name
11 from whatever sn
12 ) b on to_char(b.id) in (a.ids)
13 /
IDS NAME SURNAME ID SECOND_NAM
---------- ---------- ---------- ---------- ----------
12,24 SAM I-AM
SQL>
Как вы можете видеть, он возвращает значения из левого запроса и ничего из правого по причине, которую я привел выше.
Если вы хотите получить что-то из обоих запросов на основе частичного совпадения идентификаторов, вам нужно сделать это:
SQL> select a.ids
2 , a.name
3 , a.surname
4 , b.id
5 , b.second_name
6 from
7 (
8 select n.id_b || ',' || s.id_b ids
9 , n.name
10 , s.surname
11 , n.id_b as n_id_b
12 , s.id_b as s_id_b
13 from names n,
14 surnames s
15 where n.id_a = s.id_a
16 ) a
17 left join
18 (
19 select sn.id, sn.second_name
20 from whatever sn
21 ) b on (b.id = a.n_id_b or b.id = a.s_id_b )
22 /
IDS NAME SURNAME ID SECOND_NAM
---------- ---------- ---------- ---------- ----------
12,24 SAM I-AM 24 I AM SAM
SQL>
Если вы выберете этот последний подход, вы можете подумать о том, чтобы превратить внешнее соединение во внутреннее. Зависит от вас точное бизнес-правило.