View mit vergleich(Wo ist der Fehler??)

Hy
ich habe einen View erstellt mit dem ich etwas vergleichen will,
aber wenn ich den SQL-Befehl ausführe den ich anhänge ändert er es wie folgt.

 SELECT grouped_calls.ausgangsnummer, ( SELECT destination.name
           FROM destination
          WHERE grouped_calls.ausgangsnummer like(destination.dialcode || '%')
          ORDER BY char_length(destination.dialcode) DESC
         LIMIT 1) AS location, grouped_calls.calls_count
   FROM ( SELECT call_test.ausgangsnummer, count(*) AS calls_count
           FROM call_test
          GROUP BY call_test.ausgangsnummer) grouped_calls;

dann speichert er das und zeigt mir das:

CREATE OR REPLACE VIEW calls_view AS 
 SELECT grouped_calls.ausgangsnummer, ( SELECT destination.name
           FROM destination
          WHERE grouped_calls.ausgangsnummer::text ~~ (destination.dialcode::text || '%'::text)
          ORDER BY char_length(destination.dialcode::text) DESC
         LIMIT 1) AS "location", grouped_calls.calls_count
   FROM ( SELECT call_test.ausgangsnummer, count(*) AS calls_count
           FROM call_test
          GROUP BY call_test.ausgangsnummer) grouped_calls;

Warum kommentiert der mir das aus?? Ich finde den Fehler nicht.


Gruß BoOnOdY

Ich kann keinen Kommentar erkennen. PG formuliert etwas um, damit es klarer wird, was zu tun ist, so beschreibr er z.B. mit dem ::text den korrekten Datentyp, und er ändert like in ~~. Ansonsten ist da kein Unterschied für mich erkennbar.

Andreas

Was ist denn da auskommentiert?

Die ~~ stehen für einen Regexp Vergleich.

achso, sorry, :astonished:
aber irgendwie macht der das mit location trozdem nicht, dann stimmt wohl was anderes nicht.
Was macht das Programm eurer Meinung nach? Nur damit ich ma wieder Überblick bekomme. Seh nämlich im Moment nicht, warum der mir die location nicht anzeigt …
das “%” ist doch in SQL auch ein Platzhalter, oder?
Also es sagt, dass Dialcode+irgendwelche anderen zahlen dér Vergleichsoperator ist?

Weiss ja nicht mal richtig, was du erreichen möchtest.

Funktioniert denn der Query, wenn du ihn ohne View absetzt? Liefert der Subselect das von dir gewünschte Ergebnis, wenn du ihn einzeln ausführst?

Also jetzt nur der Vergleich, weil der Rest ist ja eigentlich egal:

Der vergleich soll 2 Tabellen nehmen und gucken
ob irgendwo in der Tabelle Destination in der Spalte Dialcode eine Nummer ist, die genau dem Anfang von dem Datensatz aus der Tabelle Call_test und der Spalte Ausgangsnummer ist.

Also die Herkunft eines Anrufes identifizieren.

Und funktioniert dieser Vergleich, wenn du ihn einzeln ausführst, mit deinen Testdaten?

Hast du Umstände wie nationale/internationale Vorwahlen beachtet?

Also ich teste im Moment diese Funktion

SELECT name, ausgangsnummer
           FROM destination,call_test    
          WHERE call_test.ausgangsnummer like (destination.dialcode||'%')
          ORDER BY char_length(destination.dialcode) DESC
         LIMIT 1;

da bekomm ich aber nie was ausgegeben…
Die Vorwahl stimmt schon, aber war ne gute Idee.

Also ich vergleiche die Nummer die ich bekommen habe mit der Destinationsvorwahl… und bekomm nie was ausgegeben.

Hab auch ma die Logig ein bisschen umgebaut, aber bekomm nichts ausgegeben… ist in der Abfrage irgend ein Denkfehler?

Was für Gründe kann es haben wenn der nichts ausgibt? Außer das er keine Ergebnisse hat?

Wilde Vermutung:

Deine Spalten sind vom Typ char(N). Dieser wird mit Spaces aufgefüllt, daher klappt das ned.
Du kommst mit TEXT besser, oder trenne Leerzeichen ab, vor dem Vergleich.

Hy,
es ist in der tat ein varchar… ich werde es mal ändern und noch mal probieren
vielen Dank schon ma :slight_smile:

Hey danke, das klappt jetzt alles :slight_smile:

Woran lag es?

Andreas

Hab nen ganz dummen Fehler in meiner Datenbank gehabt …
Hab beim Importieren die Felder vertauscht, also war Dialcode der Name und andersrum, deswegen konnte er nicht vergleichen :astonished:
ich sollte mehr schlafen :stuck_out_tongue: