Ilja: mysql5: Query

Beitrag lesen

moin,

Hm. Wenn ich Deine Abfrage 1:1 übernehme, liefert sie wirklich das gewünschte Ergebniss.

das freut mich zu hören.

Nun habe ich sie aber leicht verändert und das Ergebniss erstaunt mich:
Die Ergebnissmenge ist aber weitaus umfangreicher, wie mir scheint.
Habe ich einen Denkfehler bei der Umsetzung gemacht?

da fällt mir spontan der satz ein: "den sie wissen nicht, was sie tun...". aber spass beiseite, du hast einen denkfehler, der sich aber schnell aufklären läßt. was wir benutzen ist eine korrelierte unterabfrage und das auch noch auf ein und dieselbe tabelle, um doppelte datensätze aufzuspüren. die betonung liegt dabei auf dieselbe tabelle, sprich du hast jeden datensatz schon mal von hause aus doppelt, nämlich wenn der datensatz mit sich selber verglichen wird. deshalb ist das ungleich aus meiner abfrage wichtig, wo t1.id <> t2.id steht. das ist der primary key und sorgt dafür, das sich dieselben datensätze nicht mit sich selbst vergleichen, da dort die werte natürlich immer gleich sind. und dieser ausschluß fehlt bei dir. was du suchst ist also folgendes:

SELECT a1.*
FROM tabelle1 a1
WHERE (a1.ArtikelNummer <> '' OR IS NULL)
AND EXISTS (SELECT NULL
            FROM tabelle1 a2
            WHERE a2.ArtikelNummer = a1.ArtikelNummer
            AND a2.id <> a1.id
           )
ORDER BY a1.ArtikelNummer DESC
;

noch ein hinweis, bei mysql ist ein wert wie '' nicht NULL. und prüfungen auf NULL gehen mit dem IS oeprator. du musst halt schauen, ob du '' werte hast oder auch NULL spalten.

Ilja