<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - DELETE z opcją LIMIT]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=624&amp;type=atom"/>
	<updated>2011-08-21T14:20:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=624</id>
		<entry>
			<title type="html"><![CDATA[Odp: DELETE z opcją LIMIT]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2639#p2639"/>
			<content type="html"><![CDATA[Sam DELETE nie posiada opcji LIMIT, ale w takim przypadku można skorzystać z [url=http://www.postgresql.org/docs/current/interactive/ddl-system-columns.html]kolumny systemowej[/url] ctid (każda tabela posiada własny zestaw takich "ukrytych" kolumn) np.:

[code]DELETE FROM proba
WHERE ctid =
    (SELECT ctid
    FROM proba
    WHERE a1 = 1 AND a2 LIKE 'pol'
    LIMIT 1);
DELETE 1
TABLE proba;
 a1 | a2  
----+-----
  1 | pol
(1 row)[/code]

Bardziej rozbudowana postać (dla większych limitów):

[code]DELETE FROM proba
WHERE ctid IN
    (SELECT ctid
    FROM proba
    WHERE a1 = 1 AND a2 LIKE 'pol'
    LIMIT 2);[/code]

Nieco więcej na ten temat można znaleźć [url=http://www.postgres.cz/index.php/PostgreSQL_SQL_Tricks#Fast_first_n_rows_removing]tutaj[/url].]]></content>
			<author>
				<name><![CDATA[gszpetkowski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1223</uri>
			</author>
			<updated>2011-08-21T14:20:08Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2639#p2639</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[DELETE z opcją LIMIT]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2638#p2638"/>
			<content type="html"><![CDATA[Witam

Ciekawi mnie czy da się w postgresie zrobić zapytanie ,które usunie mi tylko 1 rząd z mimo warunku zapytania.

Objaśnienie:

Mam tabelke:
[code]
CREATE TABLE proba
(
  a1 integer,
  a2 character varying
)[/code]

Dodaje do niej dane:
[code]
insert into proba(a1,a2) select 1,'pol'
insert into proba(a1,a2) select 1,'pol'
[/code]

Mam w niej dwa identyczne rzędy.

Teraz chciałbym zrobić to o co mi głównie chodzi.
[code]
delete from proba where a1 = 1 and a2 = 'pol' LIMIT 1
[/code]

czyli chcę by skasował mi tylko jeden rząd.

Proszę was o pomoc]]></content>
			<author>
				<name><![CDATA[Rogo]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1161</uri>
			</author>
			<updated>2011-08-21T13:44:27Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2638#p2638</id>
		</entry>
</feed>
