<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - złączenie tabel: występuje - nie występuje]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1360&amp;type=atom"/>
	<updated>2012-07-11T07:51:00Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1360</id>
		<entry>
			<title type="html"><![CDATA[Odp: złączenie tabel: występuje - nie występuje]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3665#p3665"/>
			<content type="html"><![CDATA[Pisałem wczoraj na szybko i popełniłem błąd - ma być po wykonaniu i założeniu - wczoraj nie miałem już dostępu do neta żeby to naprostować.
Przy wstawianiu danych niepotrzebnie użyłem wszystkich id_zad (usuń z pierszej tabeli pierwsze 2 i z drugiej ostatnie 2)
[code]
insert into zalozenie values (1,3);
insert into zalozenie values (2,4);
insert into zalozenie values (3,5);
insert into zalozenie values (4,6);

insert into wykonanie values (1,5);
insert into wykonanie values (2,6);
insert into wykonanie values (3,7);
insert into wykonanie values (4,8);
[/code]
teraz mamy 8 przypadków użycia id_zad - wszystkich w zadaniach jest 10
czyli wynik powinien wyglądać tak:
id_zad | zalozenie | wykonanie
3 | t | f
4 | t | f
5 | t | t
6 | t | t
7 | f | t
8 | f | t

brane są pod uwagę tylko te id_zad, które występują w tych dwóch tabelach: założenie + wykonanie


dopisałem na końcu twojego zapytania:
[code]where exists(select 1 from wykonanie where id_zad=z.id_zad) or exists(select 1 from zalozenie where id_zad=z.id_zad)[/code] i wynik jest poprawny.

Dzięki.]]></content>
			<author>
				<name><![CDATA[przesq]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1211</uri>
			</author>
			<updated>2012-07-11T07:51:00Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3665#p3665</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: złączenie tabel: występuje - nie występuje]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3663#p3663"/>
			<content type="html"><![CDATA[Trochę nie jasny ten opis, bo jeśli pójdę po tabeli 'wykonanie' to nie jestem wstanie sprawdzić warunku "[b]nie występuje w wykonanie[/b] - występuje w zalozenie" bo do dyspozycji mam tylko id zadania które są w wykonanie, to samo jeśli pójdę po tabeli 'zalozenie' ale wtedy nie jestem wstanie sprawdzić warunku "występuje w wykonanie - [b]nie występuje w zalozenie[/b]"

Musisz chyba coś jeszcze napisać o swoim projekcie. A tak z ciekawości dlaczego jeśli chcesz iść po tabeli wykonania do powyższego select-a nie dopiszesz warunku [b]WHERE exists(select 1 from wykonanie where id_zad=z.id_zad)[/b]]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2012-07-10T20:37:35Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3663#p3663</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: złączenie tabel: występuje - nie występuje]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3662#p3662"/>
			<content type="html"><![CDATA[nie napisałem, że tabela zadania ma blisko 2000 rekordów i ta lista musi być względem wykonania - gdyż w tej tabeli będzie ok 200 rekordów, w założeniu ok 300 więc potrzebuję sprawdzać względem wykonania.
w tym zapytaniu zwraca mi wszystkie zadania a potrzebuję wg założeń.]]></content>
			<author>
				<name><![CDATA[przesq]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1211</uri>
			</author>
			<updated>2012-07-10T10:22:39Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3662#p3662</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: złączenie tabel: występuje - nie występuje]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3661#p3661"/>
			<content type="html"><![CDATA[Może tak:
select z.*
,exists(select 1 from wykonanie where id_zad=z.id_zad) and not exists(select 1 from zalozenie where id_zad=z.id_zad) as "występuje w wykonanie - nie występuje w zalozenie"
,exists(select 1 from wykonanie where id_zad=z.id_zad) and exists(select 1 from zalozenie where id_zad=z.id_zad) as "występuje w wykonanie - występuje w zalozenie"
,not exists(select 1 from wykonanie where id_zad=z.id_zad) and exists(select 1 from zalozenie where id_zad=z.id_zad) as "nie występuje w wykonanie - występuje w zalozenie"
from zadania z]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2012-07-10T09:21:41Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3661#p3661</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[złączenie tabel: występuje - nie występuje]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3660#p3660"/>
			<content type="html"><![CDATA[mam 3 przykładowe tabele
[code]
CREATE TABLE zadania (
  id_zad serial NOT NULL,
  zadanie character varying(30)
);

insert into zadania values (1,'test1');
insert into zadania values (2,'test2');
insert into zadania values (3,'test3');
insert into zadania values (4,'test4');
insert into zadania values (5,'test5');
insert into zadania values (6,'test6');
insert into zadania values (7,'test7');
insert into zadania values (8,'test8');
insert into zadania values (9,'test9');
insert into zadania values (10,'test10');

CREATE TABLE zalozenie (
  id_zal serial NOT NULL,
  id_zad integer NOT NULL
);

insert into zalozenie values (1,1);
insert into zalozenie values (2,2);
insert into zalozenie values (3,3);
insert into zalozenie values (4,4);
insert into zalozenie values (5,5);
insert into zalozenie values (6,6);

CREATE TABLE wykonanie (
  id_wyk serial NOT NULL,
  id_zad integer NOT NULL
);

insert into wykonanie values (1,5);
insert into wykonanie values (2,6);
insert into wykonanie values (3,7);
insert into wykonanie values (4,8);
insert into wykonanie values (5,9);
insert into wykonanie values (6,10);
[/code]

Potrzebuję złączyć te tabele po id_zad tak aby wykazać 3 warianty w jednym zapytaniu: 
występuje w wykonanie - nie występuje w zalozenie
występuje w wykonanie - występuje w zalozenie
nie występuje w wykonanie - występuje w zalozenie

w trzech zapytaniach to wiem jak zrobić, ale może jest sposób zrobić to w jednym zapytaniu.]]></content>
			<author>
				<name><![CDATA[przesq]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1211</uri>
			</author>
			<updated>2012-07-10T06:57:04Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3660#p3660</id>
		</entry>
</feed>
