Memisahkan Lajur VARCHAR kepada Berbilang Nilai dalam SQL
Matlamat anda adalah untuk memisahkan lajur VARCHAR, AD_Ref_List.Value, kepada berbilang nilai berdasarkan nilai yang disimpan dalam jadual lain, khususnya xx_insert.XX_DocAction_Next. Walau bagaimanapun, anda menghadapi masalah di mana Oracle mentafsir nilai dalam senarai yang dibataskan sebagai rentetan tunggal, menyebabkan pertanyaan anda tidak mengembalikan baris.
Untuk menyelesaikan masalah ini, anda boleh mengubah suai pertanyaan anda untuk memasukkan pembatas di sekeliling nilai dalam klausa IN, memastikan Oracle mengiktirafnya sebagai nilai individu untuk perbandingan. Selain itu, anda boleh menggunakan operator LIKE untuk menyemak sama ada nilai dalam AD_Ref_List.Value ialah subrentetan senarai yang dipisahkan (juga dengan pembatas yang dililitkan di sekelilingnya).
Berikut ialah pertanyaan yang disemak yang menggabungkan perubahan ini:
SELECT r.Value FROM AD_Ref_List r INNER JOIN xx_insert x ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' ) WHERE r.AD_Reference_ID = 1000448 AND x.xx_insert_id = 1000283;
Dengan membalut nilai dalam pembatas, pertanyaan ini akan memisahkan lajur VARCHAR dengan berkesan ke dalam berbilang nilai, membolehkan anda menapis hasil berdasarkan nilai dalam jadual lain.
Perhatikan bahawa walaupun pertanyaan ini mungkin menyediakan fungsi yang diingini, ia mungkin bukan pendekatan yang paling cekap. Jika boleh, secara amnya disyorkan untuk mengelak daripada memanipulasi senarai terhad dalam SQL kerana ia boleh memperkenalkan isu kerumitan dan prestasi. Sebaliknya, pertimbangkan untuk menggunakan struktur data yang lebih sesuai, seperti tatasusunan atau objek JSON, untuk menyimpan dan memanipulasi data anda.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Lajur VARCHAR kepada Berbilang Nilai dalam SQL Menggunakan Pembatas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!