我正在尝试查找在一个表中但不在另一个表中的行,两个表在不同的数据库中,并且在我用来匹配的列上也有不同的列名。
我有一个查询,下面的代码,我认为它可能有效,但它太慢了:
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 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
上有一个索引。
https://stackoverflow.com/questions/7596073/