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?
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.