在一列中連接具有逗號分隔值的表
在處理資料庫時,通常需要基於包含逗號的列來連接表-分隔值。在這種特定情況下,您嘗試檢索表 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中文網其他相關文章!