My tables are set up something like this:
table name: process
fields: name, id_string
table name: value_seach
fields: id_string, value
I want to construct a select statement that will display all of the process names (with it's respective id_string) that do not have an entry in value_search.
The id_string in the process table can be null, and still have a name, but those need to be excluded if possible. The id_string in value_search can never be null
How do I do this?
To test whether a row exists in a MySQL table or not, use exists condition. The exists condition can be used with subquery. It returns true when row exists in the table, otherwise false is returned. True is represented in the form of 1 and false is represented as 0.
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.
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_string
FROM
process p
LEFT JOIN value_search v
ON v.id_string = p.id_string
WHERE
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_string
FROM process p
WHERE
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_string
FROM process p
LEFT 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_string
FROM process p
LEFT OUTER JOIN value_search v
ON p.id_string = v.id_string
WHERE
p.id_string IS NOT NULL
AND v.id_string IS NULL
SELECT
name,
id_string
FROM process
WHERE id_string IS NOT NULL AND id_string NOT IN SELECT id_string FROM value_seach
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With