Rumah > pangkalan data > tutorial mysql > Bilakah Saya Harus Menggunakan MANA-MANA ​​Daripada IN dalam Klausa WHERE?

Bilakah Saya Harus Menggunakan MANA-MANA ​​Daripada IN dalam Klausa WHERE?

Linda Hamilton
Lepaskan: 2025-01-14 20:37:44
asal
249 orang telah melayarinya

When Should I Use ANY Instead of IN in a WHERE Clause?

Cara menggunakan ANY dan bukannya IN dalam klausa WHERE

Andaikan anda mempunyai pertanyaan seperti MyModel.where(id: ids) dalam Rails yang menjana SQL menggunakan IN yang mengandungi senarai ID:

<code class="language-sql">SELECT "my_models".* FROM "my_models"
WHERE  "my_models".`"id"` IN (1, 28, 7, 8, 12)</code>
Salin selepas log masuk

Untuk menggunakan APA-APA dan bukannya IN anda boleh mencuba:

<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Salin selepas log masuk

Walau bagaimanapun, apabila tatasusunan ids kosong, pendekatan ini gagal dan mengakibatkan ralat sintaks SQL.

Fahami DALAM dan APA-APA

IN dan ANY ungkapan mempunyai dua bentuk:

  • expression IN (subquery)
  • expression IN (value [, ...]) atau expression ANY (array expression)

Untuk bentuk kedua, IN menjangkakan senarai nilai, manakala ANY menjangkakan tatasusunan.

Bila hendak menggunakan ANY dan IN

ANY ialah pilihan yang lebih umum yang boleh digunakan dengan mana-mana operator yang mengembalikan nilai boolean. IN ialah kes khas ANY.

Dari segi prestasi, ANY tidak pernah lebih pantas daripada = ANY dan = ANY tidak lebih pantas daripada IN. Pilihan harus berdasarkan kemudahan.

Jika ID datang daripada pangkalan data, adalah lebih cekap untuk menggunakan subquery atau JOIN. Untuk prestasi terbaik apabila menghantar senarai panjang nilai daripada klien, pertimbangkan untuk menggunakan tatasusunan, unnest() atau ungkapan VALUES.

= Sintaks MANA-MANA ​​

Postgres menerima bentuk ungkapan tatasusunan berikut:

  • Pembina tatasusunan: ARRAY[1,2,3]
  • Tatasusunan literal: {1,2,3}

Untuk mengelakkan penukaran jenis, hantar tatasusunan secara eksplisit: ARRAY[1,2,3]::numeric[].

Bagaimana untuk menghantar tatasusunan daripada Ruby

Anggap id ialah integer:

<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bilakah Saya Harus Menggunakan MANA-MANA ​​Daripada IN dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan