Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SpatiaLite - Verschachtelte Abfrage

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von knogga, 21 Dezember 2013.

  1. knogga

    knogga Neuer Benutzer

    Hallo,
    ich arbeite erst seit kurzem mit SQL und benötige eine Syntax, bei der für jede Straße die Anzahl der Plätze angegeben wird, die von diesen geschnitten werden. Einmal also die Straßennamen und einmal die Anzahl der geschnittenen Plätze.

    Ich nehme an, dass man die Anzahl mit COUNT(*) beschreibt und das Schneiden mit CROSSES. Nur wie fügt man das zusammen? Ich habe es hiermit versucht, aber irgendwie scheint das nicht zu stimmen:

    SELECT a.name AS Line, COUNT(*) AS Anzahl
    FROM strassen a, plaetze b
    WHERE Crosses (a. Geometry, b.Geometry)

    Vielen Dank für die Hilfe!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich kenne SpatiaLite nicht, aber Dein SQL hat einen Syntaxfehler: alle Spalten müssen entweder aggregiert oder gruppiert werden. Es gibt, soweit ich weiß, nur eine DB, die kaputt genug ist, dagegen zu verstoßen und Abfragen wie oben zuzulassen.

    Wenn Du PostGIS verwenden würdest wäre möglicherweise Hilfe leichter möglich.
     
  3. knogga

    knogga Neuer Benutzer

    Hallo,
    vielen Dank. Stimmt, das mit dem Gruppieren habe ich vergessen.

    Wenn ich jetzt aber alle Straßen suchen möchte, die in keinen Platz liegen und auch nicht berühren, müsste die Syntax doch eigentlich so aussehen:

    SELECT a.name
    FROM strasse a, plaetze b
    WHERE Within(a.Geometry, b.Geometry) <> 1
    GROUP BY a.name;

    Wenn ich das aber so gruppiert mache, werden mir immer noch alle Straßen des Datensatzes angezeigt. Mit <>1 müssten doch eigentlich nur die Straßen angezeigt werden, die nicht innen drin liegen, oder?

    Vielen Dank und liebe Grüße
    Annika
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Jetzt hast aber keine Aggregation mehr mehr, warum dann das GROUP BY? Was liefert Within() für ein Resultat? In PostGIS liefert ST_Within, was offenbar dasselbe macht, ein BOOL. Da macht Deine Where-Condition auch nur bedingt Sinn. In PG käme da auch ein Fehler:

    Code:
    test=*# select true::bool <> 1;
    ERROR:  operator does not exist: boolean <> integer
    LINE 1: select true::bool <> 1;
      ^
    HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
    
    Möglicherweise ist Deine Where-Condition in Deinem SpatiaLight damit IMMER gültig.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden