Requête SQL sur une table avec une colonne de géographie à searchr s'il existe une ligne située à une certaine distance d'une autre ligne de la même table

J'ai une table avec plusieurs rangées. La table a une colonne de type géographie non nulle.

Disons que j'ai un tableau avec les colonnes suivantes: ID, Latitude, Longitude, GeoData. La colonne GeoData est de type géographique dans SQL Server 2016.

Je sais comment find des lignes à une certaine distance d'un seul point.

Ce que je lutte avec est d'écrire une requête qui permettra de comparer toutes les lignes par rapport à toutes les autres lignes excluant lui-même * .ID <> * .ID

J'ai quelque chose comme ça:

SELECT * FROM GeoTable tableA INNER JOIN GeoTable tableB ON tableA.ID = tableB.ID WHERE tableA.GeoData.STDistance(tableB.GeoData) <= 500 AND tableA.ID <> tableB.ID 

Mais ça ne fait pas ce que je veux.

Toute aide serait grandement appréciée!

Il semble que vous pourriez avoir besoin d'une jointure croisée. Cela crée un produit cartésien entre les deux tables. Vous pouvez lire à ce sujet ici . La performance n'est pas très bonne si la table est très grande. Est-ce un problème pour vous?

 SELECT * FROM GeoTable tableA OUTER APPLY GeoTable tableB WHERE tableA.GeoData.STDistance(tableB.GeoData) <= 500 AND tableA.ID <> tableB.ID 

Faites-moi savoir si cela ne fait pas ce que vous voulez, et nous pouvons travailler pour l'améliorer.

J'ai réussi à get les résultats que je cherchais.

Voici le code:

 SELECT tableA.*, tableB.*, tableA.GeoData.STDistance(tableB.GeoData) AS DistanceApart FROM GeoTable tableA JOIN GeoTable tableB ON (tableA.GeoData.STDistance(tableB.GeoData) <= 500) AND tableA.ID <> tableB.ID ORDER BY DistanceApart 

Cependant, la réponse donnée par @BWarner donne aussi les mêmes résultats, ce qui est exactement ce que je voulais, alors merci!

Par curiosité, comment peut-on améliorer les performances de cette requête?