Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL: Select Keys that doesn't exist in one table

Tags:

sql

select

mysql

I got a table with a normal setup of auto inc. ids. Some of the rows have been deleted so the ID list could look something like this:

(1, 2, 3, 5, 8, ...)

Then, from another source (Edit: Another source = NOT in a database) I have this array:

(1, 3, 4, 5, 7, 8)

I'm looking for a query I can use on the database to get the list of ID:s NOT in the table from the array I have. Which would be:

(4, 7)

Does such exist? My solution right now is either creating a temporary table so the command "WHERE table.id IS NULL" works, or probably worse, using the PHP function array_diff to see what's missing after having retrieved all the ids from table.

Since the list of ids are closing in on millions or rows I'm eager to find the best solution.

Thank you! /Thomas

Edit 2:

My main application is a rather easy table which is populated by a lot of rows. This application is administrated using a browser and I'm using PHP as the intepreter for the code.

Everything in this table is to be exported to another system (which is 3rd party product) and there's yet no way of doing this besides manually using the import function in that program. There's also possible to insert new rows in the other system, although the agreed routing is to never ever do this.

The problem is then that my system cannot be 100 % sure that the user did everything correct from when he/she pressed the "export" key. Or, that no rows has ever been created in the other system.

From the other system I can get a CSV-file out where all the rows that system has. So, by comparing the CSV file and my table I can see if: * There are any rows missing in the other system that should have been imported * If someone has created rows in the other system

The problem isn't "solving it". It's making the best solution to is since there are so much data in the rows.

Thanks again!

/Thomas

like image 458
Thomas Avatar asked Jul 18 '11 10:07

Thomas


People also ask

How do I select data from one table is not in another table?

We can get the records in one table that doesn't exist in another table by using NOT IN or NOT EXISTS with the subqueries including the other table in the subqueries.

What is select distinct in SQL?

The SQL SELECT DISTINCT Statement The SELECT DISTINCT statement is used to return only distinct (different) values. Inside a table, a column often contains many duplicate values; and sometimes you only want to list the different (distinct) values.


1 Answers

We can use MYSQL not in option.

SELECT id
FROM table_one
WHERE id NOT IN ( SELECT id FROM table_two )

Edited

If you are getting the source from a csv file then you can simply have to put these values directly like:

I am assuming that the CSV are like 1,2,3,...,n

SELECT id
FROM table_one
WHERE id NOT IN ( 1,2,3,...,n );

EDIT 2

Or If you want to select the other way around then you can use mysqlimport to import data in temporary table in MySQL Database and retrieve the result and delete the table.

Like:

Create table

CREATE TABLE my_temp_table(
   ids INT,
);

load .csv file

LOAD DATA LOCAL INFILE 'yourIDs.csv' INTO TABLE my_temp_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(ids);

Selecting records

SELECT ids FROM my_temp_table
WHERE ids NOT IN ( SELECT id FROM table_one )

dropping table

DROP TABLE IF EXISTS my_temp_table
like image 85
Talha Ahmed Khan Avatar answered Sep 18 '22 05:09

Talha Ahmed Khan