Toon posts:

[MySQL] Sorteren op veld A mits niet null, anders B

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de het volgende probleem waar ik nog geen elegante oplossing voor gevonden heb (voor MySQL althans). Misschien is het toch eenvoudig, maar in mijn sql boeken heb ik het niet terug gevonden, en op internet wordt gesuggereerd om dit met scripting(php) op te lossen, maar ik wil het liever in een fatsoenlijke query.

Ik heb twee velden, A en B waarbij A niet-null is en B wel null kan zijn. Ik wil nu de tupels uit deze tabel gesorteerd krijgen op B, tenzij er null staat, dan moet voor de sortering de waarde van A genomen worden.

A B
1 2
4 null
3 null
5 6

ORDER BY B, A zou uiteraard het verkeerde resultaat opleveren (A: 3, 4, 1, 5) terwijl ik (A: 1, 3, 4, 5) wil krijgen. Wie helpt me, ik dacht zelf in de richting van een paar subqueries, maar ik hoop eigenlijk dat er een mooiere aanroep voor bestaat.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
ORDER BY ISNULL(B,A)

ISNULL vervang de eerste parameter door de 2e als de eerste NULL is. Ik verwacht dat MySQL deze functie ook wel kent, probeer anders COALSESCE.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op donderdag 03 februari 2005 @ 11:58:
ORDER BY ISNULL(B,A)

ISNULL vervang de eerste parameter door de 2e als de eerste NULL is. Ik verwacht dat MySQL deze functie ook wel kent, probeer anders COALSESCE.
Dank je, ik heb de IS NULL opgezocht, en heb het op de volgende manier werken nu.

ORDER BY IF(b IS NULL, a, b)

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ok, dat zal dan wel de MySQL versie zijn :)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

P_de_B schreef op donderdag 03 februari 2005 @ 11:58:
ORDER BY ISNULL(B,A)

ISNULL vervang de eerste parameter door de 2e als de eerste NULL is. Ik verwacht dat MySQL deze functie ook wel kent, probeer anders COALSESCE.
Je bedoelt COALESCE, en die is heel zeker T-SQL-only :)

Professionele website nodig?


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
curry684 schreef op donderdag 03 februari 2005 @ 12:16:
[...]

Je bedoelt COALESCE, en die is heel zeker T-SQL-only :)
typo, maar is dat echt alleen TSQL? Ok, dacht dat dat wel universeel was

edit: in ieder geval ook bij Oracle: http://www.techonthenet.com/oracle/functions/coalesce.htm

edit2: ook MySQL (vanaf 3.23): http://dev.mysql.com/doc/mysql/en/comparison-operators.html

Ik wist niet dat Oracle en MySQL ook het T-SQL dialect ondersteunden :P

[ Voor 37% gewijzigd door P_de_B op 03-02-2005 12:22 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

* curry684 houdt mond wel weer buiten SQL Server discussies :+ Was met andere functie in de war prolly waar ik een hele dikke 'portability warning' bij aantrof dan :P

Professionele website nodig?

Pagina: 1