sql >> Base de Datos >  >> RDS >> Mysql

Ordenar los valores nulos al final

Estás bien. Sin ninguna razón que pueda entender, MySQL acepta un ORDER BY ambiguo siempre que el nombre que proporcione no se manipule de ninguna manera (De ninguna manera que se me ocurra. Tal vez existan otros).

Tan pronto como lo es, la ambigüedad se rechaza.

Esto es aceptado (y redundante):

select b.id, a.name as name
    FROM client AS a JOIN client AS b ON (a.id = b.id)
    ORDER BY name, name;

while COALESCE(name, '') , name IS NULL , name OR NULL son todos rechazados.

La solución obvia es usar un nombre diferente para el alias, uno que no aparezca en ninguna de las tablas.

Otra posibilidad sería crear una consulta anidada:

SELECT * FROM ( your query here, without ORDER ) AS original
ORDER BY IF($sortcol is NULL,1,0), $sortcol;

Eso es:

$sortcol="boat";
$sql = <<<SQL
   SELECT * FROM (
      SELECT fleet,b.boat as boat,owner FROM boats as b 
         LEFT JOIN owners as o ON  b.boat=o.boat 
   ) AS original
   ORDER BY IF($sortcol is NULL,1,0), $sortcol;
SQL;