SpatiaLite - Verschachtelte Abfrage

knogga

Neuer Benutzer
Beiträge
2
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!
 
Werbung:
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!

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.
 
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
 
Werbung:
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

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.
 
Zurück
Oben