Mehr

Mysteriöse MapInfo-Abfragesyntaxfehler

Mysteriöse MapInfo-Abfragesyntaxfehler


Ich habe Mühe, eine scheinbar ganz normale Abfrage in MapInfo v10 auszuführen.

Im SQLite Manager (ein ausgezeichnetes Firefox-Plugin) funktioniert dies wie erwartet:

SELECT area_name, street_name, address, disp_lon, disp_lat FROM mtdArea, pointAddress, street WHERE (streets.link_ID = pointAddress.link_ID) AND ((l_area_ID = area_ID) ODER (r_area_ID = area_ID))

Das Äquivalent in MapInfo

SELECT RationalisedMtdArea.Area_Name, RationalisedStreets.Street_Name, RationalisedPointAddress.address, RationalisedPointAddress.Disp_Lon, RationalisedPointAddress.Disp_Lat VON RationalisedMtdArea, RationalisedPointAddress, RationalisedStreets WHERE RationalisedStreets.Link_ID = RationalisedPointAddress.Link_ID Und ((RationalisedMtdArea.Area_ID = RationalisedStreets.L_Area_ID) oder (RationalisedMtdArea.Area_ID = RationalisedStreets.R_Area_ID))

… gibt mir ein

Kein Join zwischen den Tabellen RationalisedMtdArea und RationalisedPointAddress angegeben.
Ungültige Join-Bedingung in der WHERE-Klausel.

Mag MapInfo nicht logischOderS?
Was vermisse ich?
Vielen Dank.


Wie Herr Chimp sagt, mag MapInfo keine komplexeren Verknüpfungen in Abfragen. In diesem Fall müssen Sie die Abfrage in zwei Teile aufteilen:

1

WHERE RationalisedStreets.Link_ID = RationalisedPointAddress.Link_ID Und RationalisedMtdArea.Area_ID = RationalisedStreets.L_Area_ID

2

WHERE RationalisedStreets.Link_ID = RationalisedPointAddress.Link_ID Und RationalisedMtdArea.Area_ID = RationalisedStreets.R_Area_ID

Und fügen Sie die Ergebnisse anschließend zusammen. Dies sollte das gleiche Ergebnis liefern.

Alternativ verschieben Sie die Daten in ein räumliches DBMS wie SQL Server oder PostGres / PostGIS, wo komplexere SQL-Abfragen unterstützt werden (und MapInfo 10 kann auf die Ergebnisse zugreifen).


Soweit ich das beurteilen kann, stört es logische ORs nicht, solange Sie nicht versuchen, sie als Teil eines Joins zu verwenden, wie Sie es sind. Beispielsweise:

SELECT FROM Tabelle WHERE Spalte = 1 ODER Spalte = 2

… wird funktionieren.

Wenn Sie das ODER in Ihrem Code durch ein UND ersetzen, funktioniert es (sofern es korrekt analysiert wird. Offensichtlich erhalten Sie nicht das richtige Ergebnis).

Tut mir leid, das ist keine große Hilfe.


Schau das Video: Mapinfo-16: How to create a mapinfo tab file and BTS map from excel data