<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - [SQL] Zapytanie z dwoma tabelami]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1880</link>
		<description><![CDATA[Najświeższe odpowiedzi w [SQL] Zapytanie z dwoma tabelami.]]></description>
		<lastBuildDate>Sun, 20 Oct 2013 19:02:33 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4770#p4770</link>
			<description><![CDATA[może tak:
select 
  s.idGlowne 
, (select x from points where id=s.id_punktu_Startu) as start_x
, (select y from points where id=s.id_punktu_Startu) as start_y
, (select x from points where id=s.id_punktu_Mety) as meta_x
, (select y from points where id=s.id_punktu_Mety) as meta_y
from segmetns s

Poczytaj też o funkcjach geometrycznych w PostgreSQL [url=http://www.postgresql.org/docs/current/static/functions-geometry.html]Link[/url]]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Sun, 20 Oct 2013 19:02:33 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4770#p4770</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4769#p4769</link>
			<description><![CDATA[Moje dodatkowe pytanie- jesli w tabeli mam koumny :
tabela segmetns:
- idGlowne
- id_punktu_Startu
- id_punktu_Mety
tzn cos takiego: 12 | 12121121 | 133131313

i mam tabele points - gdzie te numery id to dany punkt z koordynatami X i Y
czyli: 12121121 | 20.2323 | 50.09099 
133131313 | 89.09090 | 23.23232

Podsumowujac segments to poprostu droga miedzy dwoma punktami prezetnowana jako id tych punktow 
i teraz przechodzac do pytania: jak zrobic zapytanie do tabeli segments zeby zamiast podawac mi id punktow X i Y to zeby mi podalo jego koordynaty (te liczby zmiennoprzecinkowe) 
Pozdrawiam Michał]]></description>
			<author><![CDATA[dummy@example.com (hetmanJIIIS)]]></author>
			<pubDate>Sun, 20 Oct 2013 10:40:52 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4769#p4769</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4682#p4682</link>
			<description><![CDATA[Dzięki C_Michal :-) wszystko idealnie sie wyselekcjonowalo i usunelo- sprawdzilem jeszcze w programach graficznych czy punkty to te ktore chcialem usunac i wszystko gra :) 
Dzieki wszytkim uzytkownikom za wlozony trud w napisanie odpowiedzi na moje pytania- Pozdrawiam Michał :-)]]></description>
			<author><![CDATA[dummy@example.com (hetmanJIIIS)]]></author>
			<pubDate>Tue, 03 Sep 2013 17:33:14 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4682#p4682</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4678#p4678</link>
			<description><![CDATA[EXISTS sprawdza czy zawarty w nim podselekt zwraca choć jeden rekord, a NOT EXISTS czy podselekt nie zwraca rekordów. W wyżej opisanym przypadku działa to tak: [b]usuń jeśli w tabeli points w polu osmid nie znajdziesz wartości z tabeli segment z pola way_id[/b].

Jeśli długo wykonuje Ci się ten DELETE to wykonaj go dwa razy raz warunkiem NOT EXISTS(SELECT 1 FROM points f  WHERE f.osmid = osm_start_node_id ), a drugi raz NOT EXISTS(SELECT 1 FROM points f  WHERE f.osmid = osm_end_node_id ).

zastanów się nad indexami w w/w tabelach.]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Wed, 28 Aug 2013 08:08:36 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4678#p4678</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4676#p4676</link>
			<description><![CDATA[Tak na szybko
[url]http://funkcje.net/view/4/5212/[/url]
[url]http://stackoverflow.com/questions/173041/not-in-vs-not-exists[/url]
[url]http://technet.microsoft.com/pl-pl/library/ms188336.aspx[/url]]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Wed, 28 Aug 2013 05:09:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4676#p4676</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4675#p4675</link>
			<description><![CDATA[Wielkie dzieki c_Michal i adamleon :) interesuje mnie co oznacza ten kawalek: 
DELETE FROM segment WHERE NOT EXISTS (SELECT <b>1 </b>FROM points p where p.osmid = segment.way_id);
// ta jedynka, bo w niektorych przykladach jest NULL
I taka doszlo mi jezcze jedno wymaganie zeby sprawdzal po dwoch kolumnach - juz nie po way_id tylko po:
- osm_start_node_id
- osm_end_node_id

Wymyslilem zeby polaczyc to OR'em i takie cos mi wyszlo:

DELETE FROM segments 
 WHERE NOT EXISTS(SELECT 1
                    FROM points f
                   WHERE f.osmid = osm_start_node_id 
                   OR f.osmid = osm_end_node_id);
Rollback;
Jednak teraz zapytanie wykonuje sie bardzo dlugo, doszlo gdzies do 15 minut i dalej idzie.... (zapytanie wykonuje sie dla 817 000 rekordow wiec chyba nie ma prawa az tak dlugo ?? Wydaje mi sie ze moze jakas petla nieskonczona.... nieiwem - moze znajdziecie mi blad jaki tutaj zrobilem... Dzieki z gory i pozdrawiam 
Michal]]></description>
			<author><![CDATA[dummy@example.com (hetmanJIIIS)]]></author>
			<pubDate>Tue, 27 Aug 2013 19:40:05 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4675#p4675</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4672#p4672</link>
			<description><![CDATA[No tak źle przeczytałem posta, chodzi Ci o coś takiego
DELETE FROM segment WHERE NOT EXISTS (SELECT 1 FROM points p where p.osmid = segment.way_id);]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Wed, 21 Aug 2013 12:18:13 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4672#p4672</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4671#p4671</link>
			<description><![CDATA[Może coś takiego?

[url]http://networking.ringofsaturn.com/SQL/SQLDeleteRowsNotInAnotherTable.php[/url]]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Wed, 21 Aug 2013 05:10:03 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4671#p4671</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4670#p4670</link>
			<description><![CDATA[może tak jeśli wynikiem mają być pola z tabeli segment
select s.* 
from segment s
where exists (select 1 from points p where p.osmid=s.way_id);

lub tak jeśli wynikiem mają być pola z tabeli points

select p.* 
from points p
where exists (select 1 from segment s where p.osmid=s.way_id);

lub tak jeśli  chcesz mieć dostęp do pól obu tabel
select * 
from segment s
join points p on p.osmid=s.way_id]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Tue, 20 Aug 2013 21:25:17 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4670#p4670</guid>
		</item>
		<item>
			<title><![CDATA[[SQL] Zapytanie z dwoma tabelami]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4669#p4669</link>
			<description><![CDATA[Witam wszytkich,
Mam taki problem:
Mam dwie tabele: 
Points:
-----------------------------
id serial NOT NULL,
  osmid bigint,
  latitude double precision,
  longitude double precision,
------------------------------------
Segment
ids bigint,
  way_id bigint,
  start_node_id bigint,
  end_node_id bigint,
  length_km double precision,
  max_speed_km_h integer,

Przyklad: 
Points: id = 1, osmid = 223,....,....
// i jet takich punktow np. 20,
Za to tabela Segment reprezetnuje tabele points z rozszerzeniem o kilka innych wlasnosci:
ids: 1, way_id=223,...,...,... i jest tych reprezentacji dla np. 100 punktow

Moje pytanie jak napisac zapytanie, by usuwalo rekordy z tabeli Segment takie, ktorych nie ma w tabeli Points - rozpoznajac po way_id (Segment) i osmid(Point).
tzn jesli w Point sa np. takie osmid : 1, 2, 3, 4, 5, to jesli w Segment w way_id sa 1,2,3,4,5,6,7,8 to zeby 6, 7 i 8 usuwalo]]></description>
			<author><![CDATA[dummy@example.com (hetmanJIIIS)]]></author>
			<pubDate>Tue, 20 Aug 2013 18:10:56 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4669#p4669</guid>
		</item>
	</channel>
</rss>
