我正在尝试查找一个表中的行,而不是另一个表中的行,这两个表都在不同的数据库中,并且在我要用来匹配的列上也有不同的列名。
我有一个查询,下面的代码,我认为它可能有效,但是速度太慢:
SELECT `pm`.`id` FROM `R2R`.`partmaster` `pm` WHERE NOT EXISTS ( SELECT * FROM `wpsapi4`.`product_details` `pd` WHERE `pm`.`id` = `pd`.`part_num` )
因此查询尝试执行以下操作:
从R2R.partmaster数据库中选择wpsapi4.product_details数据库中没有的所有ID。我匹配的列是partmaster.id和product_details.part_num
扩展Sjoerd的反连接,您还可以使用易于理解的SELECT WHERE X NOT IN (SELECT)模式。
SELECT WHERE X NOT IN (SELECT)
SELECT pm.id FROM r2r.partmaster pm WHERE pm.id NOT IN (SELECT pd.part_num FROM wpsapi4.product_details pd)
请注意,您只需要```对保留字,带空格的名称等使用反引号,而无需使用常规列名。
在MySQL 5+上,这种查询运行得非常快。 在MySQL 3/4上,它很慢。
请确保您有对有问题的领域指标 你需要有一个索引pm.id,pd.part_num。
pm.id
pd.part_num