我有两个表,记录和数据。记录有多个字段(名字、姓氏等)。每个字段都是存储实际值的数据表的外键。我需要搜索多个记录字段。
下面是一个使用INTERSECT的示例查询,但我需要一个在MySQL中工作的查询。
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"
谢谢你的帮助。
9条答案
按热度按时间wnrlj8wa1#
您可以使用内部链接来筛选在另一个数据表中有相符数据列的数据列:
in
子句是许多其他替代方法之一:rjee0c152#
我认为这种方法更容易遵循,但有一点开销,因为你开始加载大量的重复记录。我用它在一个数据库约10000-50000记录,通常相交约5查询和性能是可以接受的。
您所要做的就是“UNION ALL”每个要相交的查询,并查看每次都得到了哪些查询。
因此,如果我们在两个查询中得到相同的记录,它的计数将是2,最终的环绕查询将包括它。
cgyqldqp3#
改用联接:
以下是一些测试数据:
预期结果:
测试数据可能对海报没有用,但对想要检查解决方案以查看其是否正确工作的投票人,或想要提交答案以便测试自己答案的人可能有用。
vzgqcmou4#
我有点晚了,但我认为完全模拟
INTERSECT
的最干净、最好的方法是:9bfwbjaz5#
在MYSQL中INTERSECT的一般替代是内部连接:
或者针对您的具体情况:
6ljaweal6#
SELECT t.id FROM table t WHERE NOT EXISTS (SELECT t2.id, FROM table2 t2 WHERE t2.id = t1.id)
https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html
ars1skjm7#
由于Mysql不支持INTERSECT,您可能有两种选择:内部联接和在中。这是一个在中的解决方案:
jobtbby38#
您可以尝试以下操作:
但此选项没有优化。
jdg4fx2g9#
自2022年11月10日起,MySQL在updates of version 8.0.31中增加了对
INTERSECT
运算符的支持。您现在可以随意使用它: