Received: from maia.hub.org (maia-5.hub.org [200.46.204.29]) by mail.postgresql.org (Postfix) with ESMTP id DC93A6326B4 for ; Sat, 24 Jul 2010 01:06:09 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.29]) (amavisd-maia, port 10024) with ESMTP id 61387-07 for ; Sat, 24 Jul 2010 04:06:01 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by mail.postgresql.org (Postfix) with SMTP id 432B763250C for ; Sat, 24 Jul 2010 01:06:00 -0300 (ADT) Received: (qmail invoked by alias); 24 Jul 2010 04:05:58 -0000 Received: from mue-88-130-5-054.dsl.tropolys.de (EHLO [192.168.0.113]) [88.130.5.54] by mail.gmx.net (mp066) with SMTP; 24 Jul 2010 06:05:58 +0200 X-Authenticated: #14269776 X-Provags-ID: V01U2FsdGVkX18OsoQVPaMOWj6Kh9lHpFbcmyVW9V0a9F8r1yGi+3 B6YXfQnKhgWmpE Message-ID: <4C4A66A5.9070609@gmx.net> Date: Sat, 24 Jul 2010 06:05:57 +0200 From: Andreas User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.7) Gecko/20100713 Thunderbird/3.1.1 MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: howto delete using a join ? Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-0.011 tagged_above=-5 required=5 tests=BAYES_40=-0.001, RCVD_IN_DNSWL_NONE=-0.0001, T_RP_MATCHES_RCVD=-0.01 X-Spam-Level: X-Archive-Number: 201007/100 X-Sequence-Number: 34413 Hi, is there a way to delete from a table using information from another table to decide if a row should be dropped? In my case there is a log events ( event_id, event_type_fk, ...); event_types ( event_type_id, relevance_level ); Now I'd like to delete all old events with certain relevance_levels but not all! This works: delete from events where event_id in ( select event_id from events join event_types on event_type_id = event_type_fk where relevance_level in ( 1, 3, 5, 7) and create_ts < '2010/01/01' ); The following doesn't work but is there a more direct way which doesn't involve a subselect? delete from events join event_types on event_type_id = event_type_fk where relevance_level in ( 1, 3, 5, 7);