I’m trying to find the rows that are in one table but not another, both tables are in different databases and also have different column names on the column that I’m using to match.
I’ve got a query, code below, and I think it probably works but it’s way too slow:
SELECT `pm`.`id`
FROM `R2R`.`partmaster` `pm`
WHERE NOT EXISTS (
SELECT *
FROM `wpsapi4`.`product_details` `pd`
WHERE `pm`.`id` = `pd`.`part_num`
)
So the query is trying to do as follows:
Select all the ids from the R2R.partmaster database that are not in the wpsapi4.product_details database. The columns I’m matching are partmaster.id & product_details.part_num
Expanding on Sjoerd’s anti-join, you can also use the easy to understand
SELECT WHERE X NOT IN (SELECT)pattern.Note that you only need to use
`backticks on reserved words, names with spaces and such, not with normal column names.On MySQL 5+ this kind of query runs pretty fast.
On MySQL 3/4 it’s slow.
Make sure you have indexes on the fields in question
You need to have an index on
pm.id,pd.part_num.