Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie SQL
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
morrison
witam,
mam istotny problem z ktorym jeszcze sie nie uwiklalem wiec moze ktos mi pomoze:) Chodzi o to: mam baze danych ok. 150 tys rekordow z numerami domow, ulic w Polsce. Potrzebuję wybrac z tej bazy niepowtarzajace sie zakresy numerow domow po to by nadac im poprawne kody pocztowe. Inaczej, chce wyodrebnic poleceniem select te zakresy numerow ktore na siebie "zachodza" czyli sie powtarzaja. Kilka procent rekordow w bazie posiada wlasnie powtarzajace sie numery. Oto struktura czesci bazy(przyklad):

ID Miasto Ulica nieparzyste_od nieparzyste_do parzyste_od parzyste_do
1 Krakow Dluga 1 9 2 10
2 Krakow Dluga 11 29 12 30
3 Krakow Dluga 31 69 32 70
4 Krakow Dluga 41 79 42 80
5 Krakow Dluga 81 101 82 102
6 Krakow Dluga 103 133 104 134


Jak widac w przykladzie rekord 3 i 4 posiada zakresy numerow ktore sie dubluja. Chce je wyselekcjonowac, czyli takie zapytanie napisac aby z tego przykladu wybralo mi 3 i 4 rekord. oto zapytanie, od ktorego zaczalem ale ono nie rozwiazuje problemu:
  1. SELECT miasto, ulica, nieparzyste_od, nieparzyste_do, parzyste_od,
  2. parzyste_do
  3. FROM tabela WHERE (
  4. /* eliminacja wartosci NULL */
  5. (miasto IS NOT NULL) AND (ulica IS NOT NULL) AND (nieparzyste_od IS NOT NULL) AND (nieparzyste_do IS NOT NULL) AND (parzyste_od IS NOT NULL) AND (parzyste_do IS NOT NULL)
  6. ) AND (
  7. (miasto = miasto) AND (ulica = ulica) AND ((nieparzyste_od >= nieparzyste_od) AND (nieparzyste_od <= nieparzyste_do)) AND ((parzyste_od >= parzyste_od) AND (parzyste_od <= parzyste_do))
  8. )
  9.  
  10. GROUP BY miasto, ulica, nieparzyste_od, nieparzyste_do, parzyste_od,
  11. parzyste_do
  12. ORDER BY miasto, ulica;


jesli ktos jest w stanie prosze o jakas pomoc
winksmiley.jpg
No1B
kodzik:
  1. SELECT DISTINCT a.id, b.id
  2. FROM tabela a
  3. INNER JOIN tabela b ON (a.miasto=b.miasto) AND (a.ulica=b.ulica) AND (a.id < b.id) AND ((a.nieparzyste_od BETWEEN b.nieparzyste_od AND b.nieparzyste_do) OR (b.nieparzyste_od BETWEEN a.nieparzyste_od AND a.nieparzyste_do) OR (a.parzyste_od BETWEEN b.parzyste_od AND b.parzyste_do) OR (b.parzyste_od BETWEEN a.parzyste_od AND a.parzyste_do) OR (a.nieparzyste_do BETWEEN b.nieparzyste_od AND b.nieparzyste_do) OR (b.nieparzyste_do BETWEEN a.nieparzyste_od AND a.nieparzyste_do) OR (a.parzyste_do BETWEEN b.parzyste_od AND b.parzyste_do) OR (b.parzyste_do BETWEEN a.parzyste_od AND a.parzyste_do)
  4. )


oczywiscie mozna dodac jeszcze dodatkowe kryteria na parzystosc/nieparzystosc danych zakresow ale skrypt powinien dzialac aarambo.gif

Pozdrawiam

PS. Baza wyglada mi na baze hogi ew. pp
morrison
dzieki za pomoc, to dobre rozwiazanie. Tak to jedna z baz Hogi winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.