Mais

Erros misteriosos de sintaxe de consulta MapInfo

Erros misteriosos de sintaxe de consulta MapInfo


Estou lutando para conseguir o que parece ser uma consulta perfeitamente normal para executar no MapInfo v10.

No SQLite Manager (um excelente plugin do firefox), isso funciona como esperado:

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

O equivalente em MapInfo

SELECIONAR RationalisedMtdArea.Area_Name, RationalisedStreets.Street_Name, RationalisedPointAddress.address, RationalisedPointAddress.Disp_Lon, RationalisedPointAddress.Disp_Lat DE RationalisedMtdArea, RationalisedPointAddress, RationalisedStreets ONDE RationalisedStreets.Link_ID = RationalisedPointAddress.Link_ID E ((RationalisedMtdArea.Area_ID = RationalisedStreets.L_Area_ID) ou (RationalisedMtdArea.Area_ID = RationalisedStreets.R_Area_ID))

... me dá um

Nenhuma junção especificada entre as tabelas RationalisedMtdArea e RationalisedPointAddress.
Condição de junção inválida na cláusula WHERE.

MapInfo não gosta de lógicaOus?
o que estou perdendo?
Obrigado.


Como diz o Sr. Chimp, o MapInfo não gosta de junções mais complexas em consultas. Neste caso, você terá que dividir a consulta em duas:

1

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

2

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

E, em seguida, anexe os resultados juntos. Isso deve dar o mesmo resultado.

Como alternativa, mova os dados para um DBMS espacial, como SQL Server ou PostGres / PostGIS, onde consultas SQL mais complexas são suportadas (e MapInfo 10 pode acessar os resultados)


Pelo que eu posso dizer, não se importa com ORs lógicos, contanto que você não tente usá-los como parte de uma junção, como você está. Por exemplo:

SELECIONE DA tabela ONDE col = 1 OU col = 2

… Vai funcionar.

Se você substituir o OR em seu código por um AND, ele funcionará (na medida em que irá analisar corretamente. Obviamente, não dará o resultado correto).

Desculpe, isso não ajuda muito.


Assista o vídeo: Học Mapinfo cơ bản: Bài 04 - Nạp dữ liệu cho các đối tượng trên bản đồ