首頁 >資料庫 >mysql教程 >MySQL 中的 FIND_IN_SET() 與 IN():我什麼時候應該使用它們?

MySQL 中的 FIND_IN_SET() 與 IN():我什麼時候應該使用它們?

Barbara Streisand
Barbara Streisand原創
2024-12-18 04:12:15575瀏覽

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

Find_in_set() 與IN():了解差異

在MySQL 中,FIND_IN_SET() 和IN() 運算子起著至運算子關重要的作用從表中查詢資料。雖然兩者都可以用於測試一組值中的成員資格,但它們在處理特定場景的方式上有所不同。

考慮以下查詢,該查詢旨在檢索與訂單關聯的公司名稱:

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

此查詢成功產生所有三個公司名稱:Company 1、Another Company 和 StackOverflow。但是,如果我們將 FIND_IN_SET() 替換為 IN(),結果會出乎意料:

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

在這種情況下,只傳回第一個公司名稱 Company 1。要理解原因,必須掌握這些運算子的基本機制。

FIND_IN_SET()

FIND_IN_SET() 對逗號內的特定值執行文字搜尋- 分隔的字串。在本例中,attachedCompanyIDs 包含類似「1,2,3」的字串。 FIND_IN_SET() 傳回目標值(1、2 或 3)在此字串中的位置,如果未找到,則傳回 0。

IN()

IN另一方面,() 期望將數值清單與目標值進行比較。但是,在 MySQL 中,attachedCompanyIDs 是標量值,而不是陣列或列表。因此,MySQL 嘗試將此標量字串轉換為整數(companyID 的類型)以進行 IN() 比較。

在轉換過程中,MySQL 解釋字串中的第一個逗號 ('1,2,3' ) 作為數字部分的結尾,導致整數值為 1。本質上,IN() 條件實際上變成:

companyID IN (1)

這解釋了為什麼只有第一家公司檢索到名稱「公司 1」。 IN() 條件僅對於逗號分隔字串中的第一個值成立。

解決方案

如果假設成立逗號中的值的數量- 分隔的列表是有限的,可以採用其他方法來有效地處理此類情況。

以上是MySQL 中的 FIND_IN_SET() 與 IN():我什麼時候應該使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn