合并2个SQL查询到一个单一的一个
问题描述:
我有当独立运行两个SQL查询产生正确的结果合并2个SQL查询到一个单一的一个
查询1
SELECT id,
(6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude))))
AS distance
FROM geodata HAVING distance < 20
ORDER BY distance
LIMIT 0 , 20;
查询2
SELECT DISTINCT e.* FROM schools e
WHERE (
(e.type = 'preprimary')
)
AND(
e.title LIKE '%government%'
)
LIMIT 0, 10
我要合并第一个查询与第二个查询,以便它应该返回位于20KM半径范围内的所有标题为“政府”的“初级”类型学校,结果需要按距离排序。
如何合并两个查询?我尝试使用连接学校桌上的地理数据表。但我不知道剩下的。对不起,如果这是一个愚蠢的问题。我对SQL世界非常陌生。
答
试试这个:
SELECT *
From (
SELECT DISTINCT e.* ,
(6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude)))
) as distance
FROM schools e
LEFT JOIN geodata g ON e.id=g.id
WHERE (e.type = 'preprimary')
AND (e.title LIKE '%government%')
) as s
Where s.distance < 20
Order by s.distance
答
SELECT DISTINCT school.* FROM
(SELECT geodata.id,
(6371 * acos(cos(radians(9.977364864079215)) * cos(radians(latitude)) * cos(radians(longitude) - radians(76.58620953448485)) + sin(radians(9.977364864079215)) * sin(radians(latitude))))
AS distance ,school.*
FROM geodata LEFT JOIN school on geodata.id=school.id
WHERE
(school.type = 'preprimary')
AND(
school.title LIKE '%government%'
)
AND school.id IS NOT NULL
HAVING distance < 20)x
ORDER BY x.distance
LIMIT 0 , 10;
如果2个查询之间的列#相同以及列的格式,你应该使用一个联盟。是这样吗? –
这些表是否有任何外键? –
@BrianDeMilia:附件是http://tinypic.com/view.php?pic=5s305&s=8# – Mic