用于多字段搜索的 INTERSECT 的 MySQL 等效项
在 SQL 中,INTERSECT 运算符组合两个或多个 SELECT 语句,仅返回符合条件的行满足所有条件。一位用户最近在 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中文网其他相关文章!