sql >> Database teknologi >  >> RDS >> Mysql

Sortering Nulls sidst

Du har ret. Uden grund, som jeg kan fatte, accepterer MySQL en tvetydig ORDER BY så længe det navn, du angiver, ikke håndteres på nogen måde (ingen måde, jeg kunne komme i tanke om. Måske findes der andre).

Så snart det er tilfældet, bliver tvetydigheden afvist.

Dette er accepteret (og overflø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;

mens COALESCE(name, '') , name IS NULL , name OR NULL er alle afvist.

Den oplagte løsning er at bruge et andet navn til aliaset, et som ikke vises i nogen af ​​tabellerne.

En anden mulighed ville være at oprette en indlejret forespørgsel:

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

Det vil sige:

$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:Indsæt, hvis denne ip ikke har nogen registreringer

  2. TypeORM underforespørgsler

  3. Hvor mange rækker vil blive låst af SELECT ... BESTIL EFTER xxx LIMIT 1 FOR OPDATERING?

  4. swi prolog mysql + web