Re: DELETE FROM t WHERE EXISTS
От | Stephan Szabo |
---|---|
Тема | Re: DELETE FROM t WHERE EXISTS |
Дата | |
Msg-id | 20030228123036.L2988-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответ на | DELETE FROM t WHERE EXISTS ("Dan Langille" <dan@langille.org>) |
Ответы |
Re: DELETE FROM t WHERE EXISTS
|
Список | pgsql-sql |
On Fri, 28 Feb 2003, Dan Langille wrote: > Hi folks, > > I wanted to delete "old" rows from a table. These are the rows I > want to keep: > > SELECT * > FROM clp > ORDER BY commit_date > LIMIT 100 > > So I tried this: > > DELETE FROM clp > WHERE NOT EXISTS ( > SELECT * > FROM clp > ORDER BY commit_date > LIMIT 100); > > Uhh uhh, nothing deleted. I don't understand why. As long as the inner select returns at least 1 result NOT EXISTS is going to return false (you haven't correlated the two queries at all). > OK, I can do this instead: > > DELETE from clp > where commit_log_id NOT in ( > SELECT commit_log_id > FROM clp > ORDER BY commit_date > LIMIT 100); > > Can you think of a better way? Possibly something like: DELETE FROM clpWHERE NOT EXISTS ( select * from (select * from clp order by commit_date limit 100) tmp where tmp.commit_log_id= clp.commit_log_id); But I haven't tried it for stupid errors, and am not sure that it'd end up being any better than NOT IN anyway.
В списке pgsql-sql по дате отправления: