I have a table_A –
id | name | is_active | ----+---------+------------+ 1 | jon | 1 | 2 | ham | 0 | 3 | gary | null |
I have a table_B –
id | name | ----+---------+ 1 | jon | 2 | ham |
I want to remove rows from table B that have is_active value as 0 OR null in table A. So I’m thinking about an INNER JOIN on id column and applying a WHERE clause.
DELETE ROWS from table_B B INNER JOIN table_A A ON B.id = A.id WHERE A.is_active = 0 OR A.is_active IS NULL
I don’t want any additional columns or changes in table B after the above query. Is this the right way to do it?
Advertisement
Answer
Instead of JOIN, use exists:
DELETE FROM table_B
WHERE EXISTS (SELECT 1
FROM table_A A
WHERE A.id = table_B.id AND
(A.is_active = 0 OR A.is_active is null)
);