使用WHERE时从多个匹配中选择第一个结果

时间:2013-08-05 18:47:18

标签: mysql

我在使用MySQL执行基于邮政编码,经度和文件的区域搜索时遇到“问题”。但是在一个国家/地区内存在重复的邮政编码

我正在执行第一个查询,检查多个结果并选择第一个结果(因为它们的距离差异非常小)。但我想在一个查询中做到这一点。

有没有办法,在使用WHERE时忽略多个匹配或只是选择第一个

这是我到目前为止所做的:

SELECT
    u.name,
    dest.zc_zip,
    dest.zc_location_name,
    ACOS(
         SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat))
         + COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat))
         * COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon))
    ) * 6380 AS distance
FROM zip_coordinates dest
CROSS JOIN zip_coordinates src
CROSS JOIN users u
WHERE src.zc_id = 2 /* searching for id */
AND u.zip = dest.zc_zip
AND u.city = dest.zc_location_name
HAVING distance < 100
ORDER BY distance;

我希望将src.zc_id = 2更改为src.zc_zip = XXXX

修改

我还创建了一个sql小提琴:http://sqlfiddle.com/#!2/5fb6a/3

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你想要替换

WHERE src.zc_id = 2 /* searching for id */

与以下内容相符:

WHERE src.zc_id = (SELECT ... FROM zip_coordinates where ...)

并且您希望WHERE子句的结果是单个值。在这种情况下,您可以使用MAX功能。类似的东西:

WHERE src.zc_id = (SELECT MAX(zc_id) FROM zip_coordinates where ...)

如果您在此SELECT查询之前提供有关正在运行的查询的更多信息以选择其中一个结果,将会很有帮助。