SELECT * FROM a ORDER BY (SELECT a FROM b ORDER BY z)
Нет, это не даст вам того, что вы хотите. Во-первых, подзапрос возвращает более одной строки, поэтому его нельзя использовать в качестве выражения в ORDER BY
внешнего запроса. Это ошибка, которую вы получаете:
ERROR 1242 (21000): Subquery returns more than 1 row
Кроме того, нет никакой корреляции между строками a
и порядком строк в подзапросе, учитывая эту форму запроса. Другими словами, даже если вы отсортировали значения в подзапросе, это не приводит к сортировке строк внешнего запроса в соответствующем порядке.
Если вы пытаетесь обеспечить только одну строку в наборе результатов на строку, если a
(даже если в b
есть несколько совпадающих строк), вам, вероятно, понадобится:
SELECT DISTINCT a.*
FROM a JOIN b ON (a.id = b.a)
ORDER BY b.z;