多場搜尋的INTERSECT 的MySQL 等效項
在SQL 中,INTERSECT 運算子組合兩個或多個運算子組合兩個或多個運算子語句,僅傳回符合條件的行滿足所有條件。一位使用者最近在 MySQL 中使用 INTERSECT 執行多字段搜尋時遇到了挑戰。
查詢
以下查詢旨在從「記錄」表中與「資料」表中「名字」和「姓氏」的特定值相符的行fields :
SELECT records.id FROM records, data WHERE data.id = records.firstname AND data.value = "john" INTERSECT SELECT records.id FROM records, data WHERE data.id = records.lastname AND data.value = "smith"
MySQL替代方案
不幸的是,MySQL 不支援 INTERSECT 運算子。但是,有多種替代方法可以實現相同的結果。
內連接
一種方法是使用內連接,它會傳回所有具有符合的行兩個表中的值:
SELECT DISTINCT records.id FROM records INNER JOIN data d1 on d1.id = records.firstname AND d1.value = "john" INNER JOIN data d2 on d2.id = records.lastname AND d2.value = "smith"
IN子句
另一個替代方法是使用IN子句,它測試子查詢中是否存在某個值:
SELECT DISTINCT records.id FROM records WHERE records.firstname IN ( select id from data where value = 'john' ) AND records.lastname IN ( select id from data where value = 'smith' )
這些與MySQL 兼容的替代方法為執行多個字段提供了有效的解決方案搜索,提供高水平的靈活性和性能。
以上是如何在 MySQL 中複製 SQL 的 INTERSECT 功能以進行多個欄位搜尋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!