# Problem mit einem Select-Befehl



## Alex_winf01 (20. Mai 2008)

Ich habe eine Tabelle, in der ich ein Feld *anzahl* drinn hab und ein Feld *abgeschlossen*. Im Feld abgeschlossen kann drinn stehen: null, _null_, gelöscht. Nun möchte ich mir den höchsten Datensatz anzeigen lassen, der NICHT gelöscht ist. Angenommen, ich habe folgende Werte:

2          null
5          _null_
23        gelöscht

Jetzt habe ich folgende Abfrage erstellt:


```
Select MAX(anzahl) from tabelle where status != 'gelöscht'
```

Normalerweise müsste mir die 5 angezeigt werden, es wird mir aber null angezeigt. Wer kann mir helfen?


----------



## SlaterB (20. Mai 2008)

mann oh meter, null normal geschrieben, kursiv und unterstrichen,

lassen wir mal die 23-Zeile weg, dann hast du eine Zeile mit einem Text 'null' und eine mit einem null-Wert?
also eine der beiden Zeilen sollte doch wohl selektiert werden..

probiere mal etwas rum, lösche beide Zeilen und für neue ein mit 'a' und 'b',
werden die beide erkannt, die höhere davon ausgewählt?
dann so langsam die Zeile mit dem Text 'null' dazutun, dann die mit echt-null 
(jeweils mit anzahl-Werten, so dass sie mal ausgewählt und mal nicht ausgewählt werden) 
wann kommt es zur falschen Auswahl?

allgemein noch zur Query:
um den null-Wert genauer anzugeben schreibe
'status is null' oder 'status is not null'


----------



## Alex_winf01 (20. Mai 2008)

@ SlaterB

so steht es nun mal in der Datenbank - einmal normal und einmal kursiv. :x 

Folgender Ansatz hat mir geholfen:


```
Select MAX(anzahl)
FROM tabelle WHERE abgeschlossen !='gelöscht' OR abgeschlossen IS NULL
```


----------



## semi (20. Mai 2008)

Alex_winf01 hat gesagt.:
			
		

> so steht es nun mal in der Datenbank - einmal normal und einmal kursiv. :x


 :shock: Wie geht den sowas? Auch haben will.


----------



## voidee (20. Mai 2008)

ich gehe davon aus, dass das kursiv geschriebene null nur kursiv ist, weil du uns anzeigen willst, dass diese Zeile geliefert werden soll. (Macht MySQL nicht _null_ für tatsächlich null und null für einen Leerstring?

In Oracle könnte man das folgendermaßen erreichen

```
select * from <table>
where anzahl = (select max(anzahl ) from <table>
                  where 1=1
                  and anzahl is not null
                  and abgeschlossen is null
                  order by anzahl desc)
```
D.h. in Oracle kann man das mit einer Sub-Query erreichen. Wenn ich das Recht weis, kann das MySQL in aktuellen Versionen auch. Wie's dort aussieht musst du allerdings einen MySQL Fachmann fragen  :shock:

Die obige Lösung ist aber *unvollkommen*.

Möchtest Du alle Datensätze (DS)? Es könnte ja mehrere DS mit einer Anzahl nicht abgeschlossen geben. Oder gibt es daneben noch weitere Attribute, z.B. das früheste Datum oder die niedrigste ID.
Aus deiner Beschreibung muss ich allerdings schliessen, dass es möglich ist, dass die Abfrage mehr als 1 Ergebniszeile bringt, richtig?


----------



## Alex_winf01 (21. Mai 2008)

@ voidee



> ich gehe davon aus, dass das kursiv geschriebene null nur kursiv ist, weil du uns anzeigen willst, dass diese Zeile geliefert werden soll.



NEIN!! Wenn ich in die Datenbank schaue steht einmal null normal geschrieben drinn und einmal kursiv. Ich vermute mal, der Kollege hat dort null als String eingefügt.

Was ich möchte: Die höchste Nummer, die nicht gelöscht ist. Es gibt dann nur EINEN Datensatz. Problem aber bereits gelöst. Danke für die Hilfe.


----------

