<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - [SQL] Zapytanie z dwoma tabelami]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1880&amp;type=atom"/>
	<updated>2013-10-20T19:02:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1880</id>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4770#p4770"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-10-20T19:02:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4770#p4770</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4769#p4769"/>
			<content type="html"><![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ł]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2013-10-20T10:40:52Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4769#p4769</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4682#p4682"/>
			<content type="html"><![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ł :-)]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2013-09-03T17:33:14Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4682#p4682</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4678#p4678"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-08-28T08:08:36Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4678#p4678</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4676#p4676"/>
			<content type="html"><![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]]]></content>
			<author>
				<name><![CDATA[adamleon]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=873</uri>
			</author>
			<updated>2013-08-28T05:09:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4676#p4676</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4675#p4675"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2013-08-27T19:40:05Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4675#p4675</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4672#p4672"/>
			<content type="html"><![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);]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-08-21T12:18:13Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4672#p4672</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4671#p4671"/>
			<content type="html"><![CDATA[Może coś takiego?

[url]http://networking.ringofsaturn.com/SQL/SQLDeleteRowsNotInAnotherTable.php[/url]]]></content>
			<author>
				<name><![CDATA[adamleon]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=873</uri>
			</author>
			<updated>2013-08-21T05:10:03Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4671#p4671</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: [SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4670#p4670"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2013-08-20T21:25:17Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4670#p4670</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[[SQL] Zapytanie z dwoma tabelami]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=4669#p4669"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[hetmanJIIIS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1268</uri>
			</author>
			<updated>2013-08-20T18:10:56Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=4669#p4669</id>
		</entry>
</feed>
