2015-08-26 49 views
0

我有兩個表,我正在使用內部聯接進行聯接。如果內部聯接爲空,則顯示結果

第一張表是位置列表,第二張是每個位置的產品列表。

我的問題是當我運行內部聯接,如果有一個位置沒有任何產品的位置不會顯示。

基本上,如果內部連接沒有任何內容,它基本上不存在。

SELECT idL, n, lat,lng, latest, type, 
(3959 * acos(cos(radians('33.111963')) * cos(radians(lat)) * cos(radians(lng) - radians('-117.281985')) + sin(radians('33.111963')) * sin(radians(lat)))) AS distance 
FROM Table1 
inner join(SELECT ids, max(dateTime) as latest FROM Table2 GROUP BY ids) as tableJ 
on idL = ids 
WHERE type = "Grocery" 
GROUP BY idL 
HAVING distance < '15' 
ORDER BY distance asc 

SQL可能看起來有點瘋狂,因爲它的計算距離也太遠了。

+2

使用'LEFT JOIN'代替。 – lad2025

+0

這是SQL Server還是MySql?你爲什麼要做一個「分組依據」?爲什麼有'Having'和'Where'子句? – Brad

+0

這是在mySQL的夥伴 – Mike

回答

2

您需要將INNER JOIN更改爲LEFT JOIN,以便在右表中沒有匹配的行時可以從左表中獲取行。請記住,在這種情況下,右表中的所有列都將爲NULL。

enter image description here

0

一個LEFT OUTER JOIN將是正確的 「JOIN」 型在這種情況下使用。

LEFT OUTER JOIN產生了一套完整的從表A記錄,與匹配的記錄(如果有的話)表B.如果沒有匹配,右側將包含null。

Futher explanation of Joins