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

最佳答案

扩展 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 上有一个索引。

https://stackoverflow.com/questions/7596073/

相关文章:

mysql - "n:m"和 "1:n"在数据库设计中的意义

mysql - 为什么 MySQL InnoDB 插入这么慢?

mysql - 我可以在我的 WordPress 安装的 wp_options 表中删除 trans

mysql - 如何在 phpMyAdmin 中查看我的存储过程?

mysql - 在 Windows 上的 XAMPP 中哪里可以更改 lower_case_tabl

mysql - 目录、模式、用户和数据库实例之间的关系

mysql - 错误!找不到 MySQL 管理器或服务器 PID 文件!威联通

sql - 如何从 x 等于多个值的地方进行选择?

mysql - 如何从 MySQL 中的字符串中删除所有非字母数字字符?

sql - LOAD DATA LOCAL,如何跳过第一行?