Bandingkan keadaan WHERE Mysql menggunakan nilai JSON_TABLE
P粉011684326
P粉011684326 2024-03-27 11:34:54
0
1
413

Saya mendapat senarai ID sebagai senarai nilai JSON yang dipisahkan koma, beberapa set data sampel adalah seperti berikut [340596,340597,340595] Senarai ini boleh jadi besar, kadangkala 50k ID, dipisahkan dengan koma

Pertanyaan berikut menghubungkan ID ini ke kunci utama jadual dan mendapatkan rekod yang wujud dalam jadual sekarang

SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id

Jadual utama mungkin mengandungi ID ini, atau rekod ini mungkin telah dipadamkan daripada jadual utama, jadi tujuan pertanyaan ini adalah untuk memastikan set hasil yang dikembalikan hanya mengandungi rekod aktif

Saya terpaksa menggunakan satu lagi penapis pada pertanyaan ini dan ia berdasarkan tatasusunan int JSON yang lain dan perlu memadankannya dengan lajur ContactID

SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id  
WHERE s.ContactId IN (
SELECT cm.id  FROM 
JSON_TABLE('[12345,450597,640595]', '$[*]' columns (Id int path '$')) AS cm  
)

Walau bagaimanapun, prestasi Mysql IN tidak lebih baik untuk set hasil yang besar. Bolehkah kita menggantikan IN ini dengan sesuatu yang lebih baik?

P粉011684326
P粉011684326

membalas semua(1)
P粉251903163

Anda boleh membuang id dalam klausa IN ke dalam jadual sementara dan kemudian sertai mereka dengan JSON_TABLE untuk mendapatkan hasilnya. Sebagai alternatif, anda boleh menggunakan CTE dan menyertai keseronokan.

with temp as (
SELECT cm.id  FROM 
JSON_TABLE('[12345,450597,640595]', '$[*]' columns (Id int path '$')) AS cm  
)
SELECT s.id,s.contactid, s.Quantity FROM 
JSON_TABLE('[340596,340597,340595]', '$[*]' columns (Id int path '$')) AS sm   
LEFT JOIN mastertable s ON s.Id = sm.id
INNER JOIN temp t ON s.ID = t.id;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan