2015-08-26 2 views
0

У меня есть две таблицы, с которыми я соединяюсь с внутренним соединением.Показать результаты, если Inner Join пуста

Первая таблица - это список местоположений, а второй - список продуктов в каждом месте.

Моя проблема в том, что я запускаю внутреннее соединение, если есть местоположение без каких-либо продуктов, местоположение которых не будет отображаться.

В принципе, если во внутреннем соединении ничего нет, его по существу не существует.

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

Используйте 'ЛЕВЫЙ JOIN' вместо. – lad2025

+0

Является ли это SQL Server или MySql? Почему вы делаете «Группу»? Почему существует предложение 'Have' и' Where'? – Brad

+0

Это на mySQL приятель – Mike

ответ

2

Вам необходимо изменить INNER JOIN на номер LEFT JOIN, чтобы иметь возможность получать строки из левой таблицы, если в правой таблице нет соответствующих строк. Имейте в виду, что все столбцы из правой таблицы в этом случае будут NULL.

enter image description here

0

LEFT OUTER JOIN было бы правильным «JOIN» типа для использования в данной ситуации.

левое внешнее объединение производит полный набор записей из таблицы А, с совпадающими записями (если таковые имеются) в таблице B. Если совпадения нет, правая сторона будет содержать нуль.

Futher explanation of Joins

Смежные вопросы