Froschkoenig84
Aktiver Benutzer
- Beiträge
- 27
Hallo, vermutlich hattet ihr das alle schon mal, ich bilde mir ein, ich hätte auf MySQL mal einen Trigger gebastelt, ist aber schon ein paar Jahre her und ich weiß gar ned, ob das auf MSSQL/TransSQL überhaupt laufen würde...
Ich habe eine Tabelle A mit 250'000 Orten weltweit. Innerhalb dieser Tabelle gibt es die Felder GEO_LAT und GEO_LON. Nun möchte ich eine Tabelle-B mit den DISTANCES erzeugen.
TBL_A:
Wie ihr sehen könnt, will ich auch nur die ersten 100 DESTINATIONs. Das funktioniert soweit ganz gut, allerdings nur für Einzelabfragen. Wäre schick, wenn ich nun...
Ich habe eine Tabelle A mit 250'000 Orten weltweit. Innerhalb dieser Tabelle gibt es die Felder GEO_LAT und GEO_LON. Nun möchte ich eine Tabelle-B mit den DISTANCES erzeugen.
TBL_A:
- ID
- GEO_LAT
- GEO_LON
- ID_A
- ID_B
- DISTANCE
Code:
SELECT TOP 100
[id],
ROUND(6378388 * ACOS(SIN(@geo_lat) * SIN([geo_lat]) + COS(@geo_lat) * COS([geo_lat]) * COS([geo_lon] - @geo_lon)),0) AS 'distance'
FROM
[dbo].[destinations]
WHERE
[is_country] != 1 AND
[geo_lat] IS NOT NULL AND [geo_lat] != 0 AND
[geo_lon] IS NOT NULL AND [geo_lon] != 0
ORDER BY distance
Wie ihr sehen könnt, will ich auch nur die ersten 100 DESTINATIONs. Das funktioniert soweit ganz gut, allerdings nur für Einzelabfragen. Wäre schick, wenn ich nun...
- einen SUBSELECT oder INNERJOIN verwenden könnte um alle Datensätze mit allen anderen Datensätzen gegen zu fragen. Also Beispiel...
- München->Berlin
- München->Köln
- München->Hamburg
- Berlin->...
- und außerdem gleich noch für jedes Ergebnis einen INSERT (oder noch besser einen UPDATE, falls bereits vorhanden) in die TBL_B. Ich denke das ist klar oder?
Zuletzt bearbeitet von einem Moderator: