Select abfrage mit bestem ergebnis??

Hallo

ich versuche folgende abfrage zu starten. Es gibt eine Datenbank mit allen vorwahlnummern ,wobei noch ein Datenfeld mit der Region existiert, aus Deutschland und einige 100 vollständige Telefonnummern. Jetzt ruft einer an und ich möchte in der Datenbank sehen ob zum 1 diese Nummer vollständig in der Datenbank steht und wenn nicht möchte ich die Rufnummer in der Datenbank nachsehen welche Vorwahl hier passt und möchte mir die Region zurückgeben lassen.

Wie stelle ich das an. Ich weiß das es geht aber leider nicht wie.
Hoffentlich kann mir einer helfen.

Danke

Gruß Henning

Nun, du wirst zwei Abfragen brauchen …

Zu dem, was ads sagte, noch eine Frage an Dich: wie trennst Du folgende Nummern in Vorwahl und Rufnummer?

03514586127
03521452231
035242470
03524247150

Angenommen, keine dieser Nummern ist bisher bekannt. Du willst also nun in der Tabelle mit den Vorwahl-Nummern schauen. Also, sage mir zu jeder der Nummern die korrekte Vorwahl-Nummer.

Andreas

Mmh.

Angenommen, Du hast folgende 2 Tabellen:

test=*# select * from vorwahl ;
   nr   | region
--------+---------
 0351   | sachsen
 03521  | sachsen
 035204 | sachsen
 035242 | sachsen
(4 rows)

test=*# select * from komplett ;
     nr      |    inhaber
-------------+----------------
 03521737874 | max mustermann
 035242470   | zentrale firma
(2 rows)

Ich vereinfache das mal zu einem VIEW:

test=*# \d tel
     View "public.tel"
 Column | Type | Modifiers
--------+------+-----------
 nr     | text |
 region | text |
View definition:
 SELECT vorwahl.nr, vorwahl.region
   FROM vorwahl
UNION ALL
 SELECT komplett.nr, komplett.inhaber AS region
   FROM komplett;

test=*# select * from tel;
     nr      |     region
-------------+----------------
 0351        | sachsen
 03521       | sachsen
 035204      | sachsen
 035242      | sachsen
 03521737874 | max mustermann
 035242470   | zentrale firma
(6 rows)

Ich prüfe nun mal auf 2 Nummern und bin nur an dem Datensatz interessiert, der am besten paßt:

test=*# select *, length(nr) as laenge from tel where  '035242470' ~ nr order by length(nr) desc limit 1;
    nr     |     region     | laenge
-----------+----------------+--------
 035242470 | zentrale firma |      9
(1 row)

test=*# select *, length(nr) as laenge from tel where  '03524247150' ~ nr order by length(nr) desc limit 1;
   nr   | region  | laenge
--------+---------+--------
 035242 | sachsen |      6
(1 row)

PS.: bitte jetzt keinen Telefonterror auf meiner Durchwahl…


Andreas