Rumah > pangkalan data > tutorial mysql > FIND_IN_SET() lwn. IN() dalam MySQL: Bilakah Saya Perlu Menggunakan Setiap?

FIND_IN_SET() lwn. IN() dalam MySQL: Bilakah Saya Perlu Menggunakan Setiap?

Barbara Streisand
Lepaskan: 2024-12-18 04:12:15
asal
585 orang telah melayarinya

FIND_IN_SET() vs. IN() in MySQL: When Should I Use Each?

Find_in_set() vs IN(): Memahami Perbezaan

Dalam MySQL, operator FIND_IN_SET() dan IN() memainkan peranan penting dalam menyoal data daripada jadual. Walaupun kedua-duanya boleh digunakan untuk menguji keahlian dalam satu set nilai, mereka berbeza dalam cara mereka mengendalikan senario tertentu.

Pertimbangkan pertanyaan berikut, yang bertujuan untuk mendapatkan semula nama syarikat yang dikaitkan dengan pesanan:

SELECT name
FROM orders, company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
Salin selepas log masuk

Pertanyaan ini berjaya menghasilkan ketiga-tiga nama syarikat: Syarikat 1, Syarikat Lain dan StackOverflow. Walau bagaimanapun, jika kita menggantikan FIND_IN_SET() dengan IN(), hasilnya adalah tidak dijangka:

SELECT name
FROM orders, company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
Salin selepas log masuk

Dalam kes ini, hanya nama syarikat pertama, Syarikat 1, dikembalikan. Untuk memahami sebabnya, adalah penting untuk memahami mekanisme asas pengendali ini.

FIND_IN_SET()

FIND_IN_SET() melakukan carian literal untuk nilai tertentu dalam koma -tali yang dipisahkan. Dalam contoh ini, attachedCompanyIDs mengandungi rentetan seperti '1,2,3'. FIND_IN_SET() mengembalikan kedudukan nilai sasaran (1, 2, atau 3) dalam rentetan ini, atau 0 jika tidak ditemui.

IN()

IN (), sebaliknya, menjangkakan senarai nilai untuk dibandingkan dengan nilai sasaran. Walau bagaimanapun, dalam MySQL, attachedCompanyIDs ialah nilai skalar, bukan tatasusunan atau senarai. Oleh itu, MySQL cuba menghantar rentetan skalar ini ke dalam integer (jenis companyID) untuk perbandingan IN().

Semasa penghantaran, MySQL mentafsir koma pertama dalam rentetan ('1,2,3' ) sebagai penghujung bahagian berangka, menghasilkan nilai integer 1. Pada dasarnya, keadaan IN() dengan berkesan menjadi:

companyID IN (1)
Salin selepas log masuk

Ini menerangkan sebab hanya nama syarikat pertama, Syarikat 1, diambil semula. Keadaan IN() adalah benar hanya untuk nilai pertama dalam rentetan yang dipisahkan koma.

Penyelesaian

Jika andaian menyatakan bahawa bilangan nilai dalam koma -senarai yang dipisahkan adalah terhad, seseorang boleh menggunakan pendekatan alternatif untuk mengendalikan senario sedemikian dengan berkesan.

Atas ialah kandungan terperinci FIND_IN_SET() lwn. IN() dalam MySQL: Bilakah Saya Perlu Menggunakan Setiap?. 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