2016-01-22 81 views
0

我寫了一個複雜的查詢,它不返回所有請求的數據。看起來像INNER JOIN工作不正常。 這個查詢確實返回了正確的結果集,我只是缺少了連接表中的列。Mysql SELECT查詢HAVING結合INNER JOIN WHERE不顯示所有請求的數據

我的查詢:

SELECT Table1.Col1, Col2, Col3, Col4, Col5, Col6, (6371 * acos(cos(radians(?)) 
* cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) 
* sin(radians(lat)))) AS distance 
FROM Table1 
INNER JOIN Table2 
ON Table1.Col1 = Table2.Col1 
WHERE TABLE2.Col2 =? 
AND Table2.Col3 =? 
HAVING distance < ? 
ORDER BY distance 

我的結果只包含來自Table1值,爲什麼不INNER JOIN的工作?

編輯: 我改變了我的查詢來此基礎上P.Jairaj的答案,這似乎爲我工作:

 SELECT T1.Col1, T1.Col2, T1.Col3, T1.Col4, T1.Col5, T1.Col6, T2.Col1, 
     (6371 * ACOS(COS(RADIANS('?')) * 
     COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS('?')) + 
     SIN(RADIANS('?')) * SIN(RADIANS(lat)))) AS distance 
     FROM T1, T2 
     WHERE T1.Col1 = T2.Col1 
     AND T2.Col2 = '?' 
     AND T2.Col3 = '?' 
     HAVING distance < '?' 
     ORDER BY distance 
+0

嘗試'左外join' – RamRaider

+0

您需要在[接受的答案]的習慣得到( http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)幫助你解決你的問題。 –

+0

我得到的答案讓我更接近解決方案,但並非100%正確。在我看來,如果我接受這些作爲答案,它會混淆未來的訪問者... – user3055582

回答

1

嘗試已具備了

SELECT t1.Col1, t1.Col2, t2.Col3, t1.Col4, t2.Col5, t2.Col6, (6371 * acos(cos(radians(?)) 
* cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) 
* sin(radians(lat)))) AS distance FROM Table1 t1, Table2 t2 
Where t1.Col1 = t2.Col1 
AND t2.Col2 =? AND t2.Col3 =? 
AND distance < ? 
ORDER BY distance 
+1

OP爲什麼要「嘗試這個」?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來SO的訪問者。 –

+0

這實際上是使用HAVING距離而不是AND距離,因爲不可能使用WHERE或AND作爲AS語句創建的僞列。但是,任何人都可以解釋我是否從多列中選擇正確的方式或者是否需要使用JOIN? – user3055582

2

您還沒有指定的所有選定項目的第二個表。例如,如果你從Table2想要的東西,你將陳述:

SELECT Table1.Col1, Table1.Col2, Table2.Col1, Table2.Col2 

對於每一列你的狀態,你應該明確的關於表的選擇。

+0

你是對的,我在我的查詢中編輯了這個。謝謝 – user3055582

-2

嘗試具有何意味着你可以嘗試

HAVING TABLE2.Col2 =? AND Table2.Col3 =? AND distance < ? ORDER BY distance 
+0

你用'HAVING'替代'WHERE'?這不起作用,它會引發語法錯誤。 –

+0

我試過這個,但它給了我一個語法錯誤 – user3055582