I've got a problem to delete records from a PostgreSQL table, using a LEFT JOIN
.
I'd like to delete rows I get with the following query:
SELECT * FROM url
LEFT JOIN link_type ON url.link_type = link_type.id
WHERE link_type.id IS NULL
To do so, here is what I did:
DELETE FROM url
USING link_type
WHERE url.link_type = link_type.id AND link_type.id IS NULL
Query works but doesn't delete anything, although that's exactly what's explained in the doc: http://www.postgresql.org/docs/current/static/sql-delete.html.
Is my problem due to IS NULL
in the query or Am I missing something?
Good work, sun. Minor suggestion: when using EXISTS/NOT EXISTS you don't need to SELECT *
. A common convention (docs) is to just write SELECT 1
as like this:
DELETE FROM url WHERE NOT EXISTS (
SELECT 1 FROM link_type WHERE url.link_type = link_type.id
);
Functionally, both ways work.
Still don't understand why my previous query doesn't work (if someone could explain, would be nice), but here is how I did the trick:
DELETE FROM url WHERE NOT EXISTS (SELECT * FROM link_type WHERE url.link_type = link_type.id );
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