🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #183471

Re: [mssql] Jak zrobić takie złączenie?

#183471
From: wloochacz
Date: Mon, 13 Jul 2009 09:59
56 lines
2541 bytes
o pisze:
> Witajcie,
> 
> Są dwie tablice.
> 
> Tablica ADRESY:
> ID    ADRES
> 1    ul. strzelców 1 40-466 Opole
> 2    ul. mocherowa 666 66-666 Toruń
> 3    ul. jablek 3m7 79-987 Nowa Wieś
> 
> Tablica OBSZARY:
> KOD_POCZTOWY    OBSZAR
> 66-666    Duży
> 40-466    Mały
> 15-977    Mały
> 79-987    Średni
> 
> Chodzi o to aby wyciągnąć wszystko z tablicy ADRESY i dołączyć kolumnę
> OBSZAR z tablicy OBSZARY. Warunek złączenia to taki sam kod pocztowy,
> ale w tablicy OBSZARY jest on zaszyty pomiędzy innymi łańcuchami.
No i właśnie dlatego to jest rzeźba w gó...e, ale nich będzie.

> Myślałem, że jakiś join z like to załatwi ale nie umiałem sobie 
> poradzić......
join z like niczego nie załatwi - nie ma warunku złączenia.
Możesz zrobić tak:
1) Napisać UDFa, który będzie ekstrahował kod pocztowy z tekstu (i to 
jest ta rzeźba, bo jedyny warunek jaki mi przychodzi to analiza ciągu 
znaków pod kątem wystąpienia ciągu: nn-nnn, gdzie n =[0..9])
2) Użyć tego UDFa do pozyskania kodu pocztowego i
3) złączyć to z tabelą OBSZARY po kodzie.

1)
CREATE FUNCTION dbo.GET_ZIPCODE(@VALUE varchar(120))
returns varchar(6)
as
begin
  declare @s varchar(120)

-- tu algorytm przeszukiwania adresu pod kątem kodu pocztowego
-- i przypisanie znalezionego kodu do zmiennej @s
-- potem wyplucie @s jako wynik

  return @s;
end;

2) i 3)
select A.id, A.adres, B.OBSZAR
  from ADRESY A
  left join OBSZARY B on (dbo.GET_ZIPCODE(A.adres) = B.KOD_POCZTOWY)

I już.

-- 
wloochacz
Technical Details
Message-ID: <h3f11p$3v3$1@nemesis.news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
References: <h3eucn$9nm$1@mx1.internetia.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.neostrada.pl!nemesis.news.neostrada.pl!atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
From: wloochacz <nospam.wloochacz@nospam.dgbit.pl>
Newsgroups: pl.comp.bazy-danych
Subject: Re: [mssql] Jak zrobić takie
 złączenie?
Date: Mon, 13 Jul 2009 11:59:30 +0200
Organization: TP - http://www.tp.pl/
Lines: 56
Message-ID: <h3f11p$3v3$1@nemesis.news.neostrada.pl>
References: <h3eucn$9nm$1@mx1.internetia.pl>
NNTP-Posting-Host: plast-box.pl
Mime-Version: 1.0
X-Trace: nemesis.news.neostrada.pl 1247479673 4067 195.205.119.237 (13 Jul 2009 10:07:53 GMT)
X-Complaints-To: usenet@news.neostrada.pl
NNTP-Posting-Date: Mon, 13 Jul 2009 10:07:53 +0000 (UTC)
User-Agent: Thunderbird 2.0.0.22 (Windows/20090605)
In-Reply-To: <h3eucn$9nm$1@mx1.internetia.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit