Napisałem ten skrypt SQL:

    DECLARE @location geography  
    DECLARE @radius int  

    SET @location = (SELECT Location FROM Hydrants WHERE HydrantId = 2)  
    SET @radius = (SELECT Radius FROM Hydrants WHERE HydrantId = 2)  

    SELECT * 
    FROM Sites 
    WHERE @location.STDistance(location) < @radius 
    ORDER BY SiteId ASC  

Zrobiłem to, aby to zmienić

SELECT * 
FROM Sites, Hydrants 
Inner Join Hydrants.Location.STDistance(Sites.Location) < Hydrants.Radius  
WHERE Hydrants.HydrantId = 2 
ORDER BY Sites.SiteId ASC;  

Ale bez powodzenia.

Wszelkie rady będą mile widziane.

1
toy4fun 24 luty 2012, 00:21

2 odpowiedzi

Najlepsza odpowiedź

Nie znam cech geograficznych sql 2008, ale gdy widzisz swój kod, poniższe mogą działać:

SELECT
    Sites.*
FROM Sites
INNER JOIN Hydrants
    ON Hydrants.Location.STDistance(Sites.location) < Hydrants.Radius
WHERE Hydrants.HydrantId = 2 
ORDER BY Sites.SiteId ASC;
2
Julien May 24 luty 2012, 00:58

Nigdy nie pracowałem z typami geograficznymi, ale jest to poprawna składnia sprzężenia, które działa tak samo, jak oryginalne zapytanie;

SELECT Sites.*
FROM Sites 
JOIN Hydrants 
  ON Hydrants.Location.STDistance(Sites.Location) < Hydrants.Radius  
WHERE Hydrants.HydrantId = 2 
ORDER BY Sites.SiteId ASC; 
0
Joachim Isaksson 24 luty 2012, 00:52