SELECT aus Tabelle mit variierender IN-Liste in WHERE-Klausel
Ich habe ein Problem mit dem Projekt, an dem ich arbeite. Ich kann Ihnen keinen aktuellen Code geben, aber ich habe einen ausführbaren Beispielcode wie folgt erstellt.
Hiertemp
undtemp_id
sind zwei Tische
temp
Tabelle enthält eine durch Kommas getrennte Liste von IDs, die @ isVARCHAR2
temp_id
Tabelle enthält aktuelle IDs, die @ iNUMBER
Ich möchte Zeilen von @ suchtemp_id
table von gettingids
von durch Komma getrennte Liste von IDs vontemp
Tabell
//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);
Diese Abfrage funktioniert nicht
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE(SELECT ids FROM temp));
Arbeitsabfrage
SELECT * FROM temp_id WHERE data_id IN (SELECT to_number(COLUMN_VALUE) FROM XMLTABLE('1, 2, 3'));
Hier Unterschied zwischen den beiden obigen Abfragen ist, dass ich die Spalte von @ verwendtemp
Tabelle in der ersten Abfrage und direktes Anführungszeichenvarchar2
in der zweiten Abfrage. Sie wissen nicht, warum es nicht funktioniert? Vermisse ich etwas? Ich denke, dass es einige Datentypen gibt, die nicht übereinstimmen, aber nicht in der Lage sind, es herauszufinden.