SELECT из таблицы со списком Varying IN в предложении WHERE
Я столкнулся с проблемой в проекте, над которым я работаю, я не могу дать вам реальный код, но я создал исполняемый пример кода, как показано ниже
Вотtemp
а такжеtemp_id
две таблицы
temp
таблица содержит разделенный запятыми список идентификаторов, которыйVARCHAR2
temp_id
таблица содержит фактические идентификаторы, которыеNUMBER
Я хочу искать строки изtemp_id
стол, получаяids
из списка разделенных запятыми идентификаторов изtemp
Таблица
//DDLs to create table
CREATE TABLE temp(ids VARCHAR2(4000));
CREATE TABLE temp_id(data_id NUMBER);
//DMLs to populate test data
INSERT INTO temp VALUES('1, 2, 3');
INSERT INTO temp_id VALUES(1);
INSERT INTO temp_id VALUES(2);
INSERT INTO temp_id VALUES(3);
INSERT INTO temp_id VALUES(4);
INSERT INTO temp_id VALUES(5);
Этот запрос не работает
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE(SELECT ids FROM temp));
Рабочий запрос
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE('1, 2, 3'));
Здесь разница между двумя запросами выше, я использую столбец изtemp
таблица в первом запросе и прямая кавычкаvarchar2
во втором запросе. Не понимаю, почему не работает? Я что-то упустил? Я думаю, что может быть какое-то несоответствие типов данных, но не в состоянии это выяснить.