0
我想將這個select語句調整到我的表中。此查詢從郵政編碼表中選擇位於給定郵政編碼的特定距離內的所有郵政編碼。但是,我有一張沙龍表,它將郵政編碼表作爲外部郵政編碼表存儲。我需要在給定的郵政編碼的特定距離內選擇所有的沙龍。如何在子查詢中執行內部連接? MySQL
DELIMITER //
CREATE PROCEDURE zip_search(lat_param FLOAT(9,6),
long_param FLOAT(9,6), dist_param INT(100)
)
BEGIN
SELECT zipcode
FROM (
SELECT z.zipcode, z.latitude, z.longitude,
p.radius,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.latitude))
* COS(RADIANS(p.longpoint - z.longitude))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.latitude)))) AS distance
FROM accounts_zip AS z
JOIN ( /* these are the query parameters */
SELECT lat_param AS latpoint, long_param AS longpoint,
dist_param AS radius, 69.0 AS distance_unit
) AS p ON 1=1
WHERE z.latitude
BETWEEN p.latpoint - (p.radius/p.distance_unit)
AND p.latpoint + (p.radius/p.distance_unit)
AND z.longitude
BETWEEN p.longpoint - (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
) AS d
WHERE distance <= radius
ORDER BY distance;
END //
我嘗試從沙龍表中選擇後添加一個內部連接,但我不明白子查詢和連接非常好。任何想法將不勝感激。
DELIMITER //
CREATE PROCEDURE zip_search(lat_param FLOAT(9,6),
long_param FLOAT(9,6), dist_param INT(100)
)
BEGIN
SELECT *
FROM (
SELECT z.zipcode, z.latitude, z.longitude,
p.radius,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.latitude))
* COS(RADIANS(p.longpoint - z.longitude))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.latitude)))) AS distance
FROM accounts_salon INNER JOIN accounts_zip ON accounts_salon.id=accounts_zip.id AS z
JOIN ( /* these are the query parameters */
SELECT lat_param AS latpoint, long_param AS longpoint,
dist_param AS radius, 69.0 AS distance_unit
) AS p ON 1=1
WHERE z.latitude
BETWEEN p.latpoint - (p.radius/p.distance_unit)
AND p.latpoint + (p.radius/p.distance_unit)
AND z.longitude
BETWEEN p.longpoint - (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius/(p.distance_unit * COS(RADIANS(p.latpoint))))
) AS d
WHERE distance <= radius
ORDER BY distance;
END //