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.
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.
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…