sql >> Database >  >> RDS >> Mysql

Nulls sorteren als laatste

Je hebt gelijk. Zonder enige reden die ik kan doorgronden, MySQL aanvaardt een dubbelzinnige ORDER BY zolang de naam die u opgeeft op geen enkele manier wordt behandeld (op geen enkele manier die ik kon bedenken. Misschien bestaan ​​er nog andere).

Zodra dat het geval is, wordt ambiguïteit afgewezen.

Dit wordt geaccepteerd (en overbodig):

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 worden allemaal afgewezen.

De voor de hand liggende oplossing is om een ​​andere naam voor de alias te gebruiken, een naam die in geen van beide tabellen voorkomt.

Een andere mogelijkheid is om een ​​geneste zoekopdracht te maken:

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

Dat is:

$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;


  1. MySQL ENUM-type versus join-tabellen

  2. Hoe de SQLite Dump-opdracht te gebruiken?

  3. PHP-controle op NULL

  4. Mysql:verwijder rijen in twee tabellen met externe sleutels