mysql - 从一个表中选择,而不是在另一个表中

标签 mysql sql

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

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

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

关于mysql - 从一个表中选择,而不是在另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596073/

相关文章:

mysql - 在使用 'OR' 时不使用索引键

PHP文件上传到mysql

php - Laravel 多个 where 条件在 whereHas 回调

mysql - 根据另一列中的最大值选择列

sql - 通用数据库表设计

mysql - SQL 使用最大值连接两个表

mysql - 3 个一对多表的嵌套 json 响应

php - 如何在php中根据 session 显示菜单?

mysql - 级联不工作

mysql - 在 HANA DB 之上转换 MySQL 模式?