sql >> Databasteknik >  >> RDS >> Mysql

Sortering Null sist

Du har rätt. Utan någon anledning som jag kan förstå, accepterar MySQL en tvetydig ORDER BY så länge namnet du anger inte hanteras på något sätt (inget sätt som jag kunde komma på. Kanske finns det andra).

Så fort det är så avvisas tvetydigheten.

Detta accepteras (och överflödigt):

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

medan COALESCE(name, '') , name IS NULL , name OR NULL alla avvisas.

Den uppenbara lösningen är att använda ett annat namn för aliaset, ett som inte visas i någon av tabellen.

En annan möjlighet skulle vara att skapa en kapslad fråga:

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

Det vill säga:

$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. Hur man installerar pgAdmin 4 på Ubuntu 20.04/18.04/16.04

  2. MySQL beräkna glidande medelvärde av N rader

  3. Bredd första sökfråga i MySQL?

  4. Hur LEFT()-funktionen fungerar i MySQL