首頁 >資料庫 >mysql教程 >如何在 MySQL 資料庫中有效率地連接具有逗號分隔值的表?

如何在 MySQL 資料庫中有效率地連接具有逗號分隔值的表?

Linda Hamilton
Linda Hamilton原創
2024-12-27 14:17:16614瀏覽

How Can I Efficiently Join Tables with Comma-Separated Values in a MySQL Database?

在一列中連接具有逗號分隔值的表

在處理資料庫時,通常需要基於包含逗號的列來連接表-分隔值。在這種特定情況下,您嘗試檢索表 C 中逗號分隔列(「userids」)與特定搜尋字詞相符的使用者名稱。

使用子字串提取的SQL 查詢

您的初始查詢嘗試使用子查詢從表C 的「userids」列中的逗號分隔字串中提取第一個值。然而,這種方法效率低且不可靠,因為它假設所需的值始終是字串中的第一個。

使用find_in_set 改進查詢

更好的解決方案涉及使用MySQL 的find_in_set 函數,允許您在逗號分隔的範圍內搜尋特定值string:

SELECT *
FROM tblC c
JOIN tblB b ON (find_in_set(b.userid, c.userids) > 0)
WHERE c.nname = "new1"

此查詢將有效檢索與表 C中「nname」欄位與「new1」相符的資料列關聯的所有使用者名稱。

標準化架構替代方案

但是,請務必注意,不建議在列中儲存逗號分隔值 實務。為了獲得更好的資料完整性和效能,最好透過引入連接表來標準化架構。

在提供的範例中,您可以建立一個新的連接表 (tblC_user),其中包含兩個欄位:c_id(表的外鍵) C) 和 userid(表 B 的外鍵)。這將允許您表示表 C 和 B 之間的多對多關係,而無需使用逗號分隔的字串。

標準化查詢

使用標準化schema,您可以使用以下查詢來擷取所需的結果:

SELECT *
FROM tblC c
JOIN tblC_user cu ON (c.id = cu.c_id)
JOIN tblB b ON (b.userid = cu.userid)
WHERE c.nname = "new1"

此查詢將提供更多多基於逗號分隔值連接表的高效可靠的方法。

以上是如何在 MySQL 資料庫中有效率地連接具有逗號分隔值的表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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