I have a table_A –
x
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)
);