Gary Briggs wrote: >> SELECT >> a.id AS a_id, >> (SELECT b.id >> FROM foo AS b >> WHERE b.id!=a.id >> AND distance(a.x,a.y,b.x,b.y)<=25 >> ORDER BY b.val, distance(a.x,a.y,b.x,b.y)) >> FROM foo AS a > > This is the bit that doesn't seem to work; having > distance(a.x,a.y,b.x,b.y) in the ORDER BY clause on the inner query is > what appears to cause the error that it can't find a.x, from the outer query.
I don't know why correlated subqueries cannot use values from the outer query in the ORDER BY or LIMIT clauses; this does not look as if it were by design. Anyway, I got it to work with another indirection: SELECT foo.*, (SELECT id FROM (SELECT id, x, y, foo.x AS foo_x, foo.y AS foo_y, val FROM foo) WHERE DIST(foo_x, foo_y, x, y) < 25 ORDER BY val, DIST(foo_x, foo_y, x, y) LIMIT 1 ) AS id2 FROM foo Regards, Clemens