2014-01-13 3 views
0

У нас есть этот запрос для MYTABLE и хотел бы присоединиться к OTHER_TABLE, чтобы получить от него связанные данные. Но это просто не работает.MYSQL добавить JOIN для запроса

SELECT *,3956 * 2 * ASIN(SQRT(POWER(SIN(($orig_lat - abs(wlatitude)) * pi()/180/2),2) 
+ COS($orig_lat * pi()/180) * COS(abs(wlatitude) * pi()/180) * POWER(SIN(($orig_lon - wlongitude) * pi()/180/2), 2))) 
as distance FROM MYTABLE dest having distance < $dist ORDER BY distance 

Как мы можем добавить это в запрос без ошибок?

LEFT JOIN OTHER_TABLE ON MYTABLE.column=OTHER_TABLE.column 
+0

просто положить его между Dest и имеющим, и использовать псевдоним, который вы создали. 'LEFT JOIN OTHER_TABLE ot ON dest. = ot. ' –

ответ

0

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

SELECT DISTINCT 
    *, 
    3956 * 2 * ASIN(
    SQRT(
     POWER(
     SIN(
      ($orig_lat - ABS(dest.wlatitude)) * PI()/180/2 
     ), 
     2 
    ) + COS($orig_lat * PI()/180) * COS(ABS(dest.wlatitude) * PI()/180) * POWER(
     SIN(($orig_lon - dest.wlongitude) * PI()/180/2), 
     2 
    ) 
    ) 
) AS distance 
FROM 
    MYTABLE dest 
    LEFT JOIN OTHER_TABLE o ON dest.column=o.column 
HAVING distance < $dist 
ORDER BY distance 
0

Не зашли глубоко в ваш запрос, но это должно быть так.

SELECT 
    *, 
    3956 * 2 * ASIN(SQRT(POWER(SIN(($orig_lat - abs(wlatitude)) * pi()/180/2),2) + COS($orig_lat * pi()/180) * COS(abs(wlatitude) * pi()/180) * POWER(SIN(($orig_lon - wlongitude) * pi()/180/2), 2))) 
     as distance 
FROM MYTABLE dest 
LEFT JOIN OTHER_TABLE ON MYTABLE.column=OTHER_TABLE.column 
HAVING distance < $dist 
ORDER BY distance 
0
SELECT *, 3956 * 2 * ASIN(SQRT(POWER(SIN(($orig_lat - abs(wlatitude)) * pi()/180/2),2) 
+ COS($orig_lat * pi()/180) * COS(abs(wlatitude) * pi()/180) * POWER(SIN(($orig_lon - wlongitude) * pi()/180/2), 2))) AS distance 
FROM MYTABLE dest 
LEFT JOIN OTHER_TABLE ON dest.column = OTHER_TABLE.column 
HAVING distance < $dist ORDER BY distance 
1

Все, что вы будете делать, вы не получите «ошибки», а, возможно, результаты вам не нужно.

Если соединение составляет от 1 до 1 или от нескольких до одного, вы не получите никаких умноженных строк.

Если соединение одно для многих, вы можете получить умноженное содержимое на левой стороне для каждого числа соответствующих строк с правой стороны, в зависимости от вашего состояния.

см. http://en.wikipedia.org/wiki/Relational_algebra#Joins_and_join-like_operators для логики соединения.

к вашему запросу, а также для любого другого запроса, Techincal заказ:

select # ... 
from # table 
join # table 
on # condition 
join # another table 
on # another condition 
where # condition 
group # clause 
having # condition applied after grouping 
order by # .. 

.

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