MySQL SELECT bare ikke nullverdier
Er det mulig å gjøre en select-setning som bare tar NOT NULL-verdier?
Akkurat nå bruker jeg dette:
SELECT * FROM table
Og så må jeg filtrere ut nullverdiene med en php-løkke.
Er det en måte å gjøre:
SELECT * (that are NOT NULL) FROM table
?
Akkurat nå når jeg velger * får jeg val1,val2,val3,null,val4,val5,null,null etc.... men jeg vil bare få verdiene som ikke er null i resultatet mitt. Er dette mulig uten å filtrere med en løkke?
248
3
Du bør bruke
IS NOT NULL
. (Sammenligningsoperatorene=
og `gir begge
UNKNOWNmed
NULL` på hver side av uttrykket).Bare for fullstendighetens skyld vil jeg nevne at i MySQL kan du også negere null safe equality operator, men dette er ikke standard SQL.
Redigert for å gjenspeile kommentarer. Det høres ut som tabellen din kanskje ikke er i første normal form, i hvilket tilfelle å endre strukturen kan gjøre oppgaven din enklere. Det finnes imidlertid et par andre måter å gjøre det på ...
Ulempen med ovennevnte er at den skanner tabellen flere ganger en gang for hver kolonne. Det kan muligens unngås ved nedenstående, men jeg har ikke testet dette i MySQL.
Du kan filtrere ut rader som inneholder en NULL-verdi i en bestemt kolonne:
Hvis du vil filtrere ut rader som inneholder en null i en hvilken som helst kolonne, kan du prøve dette:
Oppdatering: Basert på kommentarene dine vil du kanskje ha dette?
Og jeg er enig med Martin i at hvis du trenger å gjøre dette, bør du sannsynligvis endre databasedesignet ditt.
Den eneste ulempen med denne tilnærmingen er at du bare kan sammenligne 5 kolonner, etter det vil resultatet alltid være falskt, så jeg sammenligner bare feltene som kan være
NULL
.