2014-03-30 39 views
1

我有當獨立運行兩個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世界非常陌生。

+0

如果2個查詢之間的列#相同以及列的格式,你應該使用一個聯盟。是這樣嗎? –

+1

這些表是否有任何外鍵? –

+0

@BrianDeMilia:附件是http://tinypic.com/view.php?pic=5s305&s=8# – Mic

回答

1

試試這個:

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 
+0

獲取錯誤#1054 - 'where子句'中的'distance'列未知 – Mic

+0

立即嘗試,'distance'未被計算 –

+0

現在正在工作。但是order_by呢?這不是一個沉重的查詢,所以距離必須計算兩次? – Mic

2
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; 
+0

感謝您的答案。但是我認爲你已經加入了查詢1的查詢2.如果我錯了,請糾正我。 我需要的是在查詢2上連接查詢1.查詢2是主查詢。 – Mic

+0

保存數據的主要標準是什麼?沒有距離? – Mihai

+0

主要查詢是找到「政府初級」學校。該搜索後來被精煉以找到附近的學校。 – Mic