Hint: LEFT JOIN is your mistake...

Thought: are you sure you are going to delete those rows? In there cases
human verification is usually the way to go, though it takes a lot of
time.

Read on...

>-----Original Message-----
>From: [EMAIL PROTECTED] 
>[mailto:[EMAIL PROTECTED] On Behalf Of 
>Francisco Reyes
>Sent: donderdag 24 mei 2007 1:12
>To: PostgreSQL general
>Subject: [GENERAL] Delete with subquery deleting all records
>
>I have two tables
>exports
>export_messages
>
>They were done without a foreign key and I am trying to clean 
>the data to put a constraint.
>
>For every record in exports_messages there is supposed to be a 
>matching record in exports with a export_id (ie export_id is 
>the foreign key for
>export_messages) 
>
>The following query identified all records that I need to delete:
>SELECT distinct export_messages.export_id as id FROM 
>export_messages LEFT OUTER JOIN exports ON 
>(export_messages.export_id = exports.export_id);
>
>I checked a number of them.. and all the records returned from 
>that select do not have a matching export_id in exports.
>
>When I try to run:
>delete from export_messages where export_id in (SELECT 
>distinct export_messages.export_id as id FROM export_messages 
>LEFT OUTER JOIN exports ON (export_messages.export_id = 
>exports.export_id) );
>

What seems more resonable:
DELETE FORM export_messages
WHERE NOT export_id IN (SELECT export_id FROM exports)

Make sure you know what you are doing (backup)...

[snip]

- Joris


---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org/

Reply via email to