一尘不染

从一个表中选择而不在另一个中

mysql

我正在尝试查找一个表中的行,而不是另一个表中的行,这两个表都在不同的数据库中,并且在我要用来匹配的列上也有不同的列名。

我有一个查询,下面的代码,我认为它可能有效,但是速度太慢:

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


阅读 250

收藏
2020-05-17

共1个答案

一尘不染

扩展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.idpd.part_num

2020-05-17