Article View: pl.comp.bazy-danych
Article #183471Re: [mssql] Jak zrobić takie złączenie?
From: wloochacz
Date: Mon, 13 Jul 2009 09:59
Date: Mon, 13 Jul 2009 09:59
56 lines
2541 bytes
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-mailReferences:
<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