Checking whether an item does not exist in another table Checking whether an item does not exist in another table sql sql

Checking whether an item does not exist in another table


In general if you want rows that don't exist in another table, then LEFT JOIN the other table and WHERE ... IS NULL to a column on the second table. Also you mentioned that you don't want rows where process.id_string is NULL.

SELECT p.name, p.id_stringFROM    process p    LEFT JOIN value_search v        ON v.id_string = p.id_stringWHERE    v.id_string IS NULL    AND p.id_string IS NOT NULL

This is known as an anti-join.


I believe using Not Exists would be your best option here.

SELECT p.name, p.id_stringFROM process pWHERE    NOT p.id_string IS NULL AND   NOT EXISTS(          SELECT NULL          FROM value_search v          WHERE p.id_string = v.id_string)


The query you want should look something like this. Note that a JOIN will be significantly faster than a subquery in the WHERE clause.

SELECT p.name, p.id_stringFROM process pLEFT OUTER JOIN value_search v   ON p.id_string = v.id_string   AND p.id_string IS NOT NULL   AND v.id_string IS NULL

An equally valid variant of the query above would be:

SELECT p.name, p.id_stringFROM process pLEFT OUTER JOIN value_search v   ON p.id_string = v.id_stringWHERE   p.id_string IS NOT NULL   AND v.id_string IS NULL