左边排除JOIN的麻烦

Table private inherits id's from table public. I'm trying to select entries in public within some distance of $lat,$lng whose id's are not found in private.

SELECT a.id, a.data, a.lat, a.lng,
  (a_distance_function(a.lat,a.lng,$lat,$lng)) as a.distance 
FROM public a
WHERE (a.lng BETWEEN $lng1 AND $lng2) AND (a.lat BETWEEN $lat1 AND $lat2) 
HAVING a.distance < $dist 
LEFT JOIN private b ON a.id = b.id
WHERE b.id is NULL;

But the MariaDB error isn't much help to me. Syntax error near '.distance FROM USMAP a WHERE a.lng BETWEEN -xx.xxx AND -xx.xxx'

JOIN's must occur before adding any conditions to your query:

SELECT a.id, a.data, a.lat, a.lng,(a_distance_function(a.lat,a.lng,$lat,$lng)) as a.distance 
FROM public a 
LEFT JOIN private b 
ON a.id = b.id 
WHERE b.id is NULL
AND a.lng BETWEEN $lng1 AND $lng2 
AND a.lat BETWEEN $lat1 AND $lat2 
HAVING a.distance < $dist