2015-08-26 47 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