Hallo liebe Retter!
Ich habe mal wieder ein eher einfaches Problem.
Nehmen wir an, ich habe eine sehr einfache Tabelle test
:
id (autoincrement, primary) | wert (integer, NULL erlaubt)
——————————————————————————————————————————————————————————————
1 9
2 83
3 NULL
4 92
5 NULL
6 NULL
7 92
8 92
Ich möchte jetzt alle Werte so haben, wie sie folgende Abfrage ausgibt:
(SELECT id,wert -- gib mir "id" und "wert"
FROM test -- aus der Tabelle test
WHERE wert IS NOT NULL -- wo "wert" nicht NULL ist
GROUP BY wert -- und gruppiere nach "wert"
HAVING MIN(id)) -- wobei ich immer den wert haben möchte,
-- der die kleinste id hat
UNION
(SELECT id,wert -- außerdem will ich "id" und "wert"
FROM test -- aus der Tabelle test
WHERE wert IS NULL) -- wo "wert" NULL ist
ORDER BY id ASC -- sortiere dann alle Zeilen nach der id
Das sind also alle Datensätze, wobei "wert" nicht doppelt vorkommen darf, es sei denn er ist NULL.
Haben mehrere Datensätze den gleichen Wert, wird von diesen Datensätzen derjenige ausgegeben, der die niedrigste id hat.
Kann ich diese Abfrage so ändern, dass "GROUP BY
" NULL-Werte gar nicht erst gruppiert?
Macht das überhaupt Sinn?
Verwendete MySQL-Version ist >= 5.0.
In der Tabelle "test" stehen nie mehr als 20000 Datensätze. Durchscnittlich sind es viel weniger; eher so 500-1000 Datensätze.
MfG H☼psel
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)