Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Lajur VARCHAR Terhad untuk Pertanyaan SQL yang Cekap?

Bagaimana untuk Memisahkan Lajur VARCHAR Terhad untuk Pertanyaan SQL yang Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-17 17:55:09748semak imbas

How to Split a Delimited VARCHAR Column for Efficient SQL Queries?

Memisahkan Lajur VARCHAR kepada Berbilang Nilai dalam SQL

Masalah:

Apabila mendapatkan semula nilai daripada lajur VARCHAR menggunakan klausa IN, Oracle menukar senarai yang dibataskan kepada a rentetan petikan tunggal, menghalang sub-pertanyaan daripada sepadan dengan nilai individu.

Penyelesaian 1:

Balutkan nilai senarai yang dibataskan dalam klausa IN dengan pembatas yang sama digunakan dalam lajur VARCHAR. Contohnya, daripada menggunakan AD_Ref_List.Value IN ('CO','VO'), gunakan AD_Ref_List.Value IN (',' || 'CO' || ',' || 'VO' || ',') .

Penyelesaian 2 (Alternatif Di Mana Klausa):

Gunakan teknik berasaskan ungkapan biasa dengan REGEXP_SUBSTR berfungsi untuk mengekstrak nilai individu daripada senarai yang dibataskan pada tahap tertentu. Sebagai contoh, pertanyaan berikut menggunakan rekursi untuk memisahkan senarai yang dibataskan:

SELECT Value
FROM AD_Ref_List
WHERE AD_Reference_ID = 1000448
AND value IN (
  SELECT REGEXP_SUBSTR(XX_DocAction_Next, '[^,]+', 1, LEVEL)
  FROM xx_insert
  WHERE xx_insert_id = 1000283
  CONNECT BY LEVEL <= REGEXP_COUNT(XX_DocAction_Next, '[^,]+')
);

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Lajur VARCHAR Terhad untuk Pertanyaan SQL yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn