Announcement

Collapse
No announcement yet.

SQL mit Details zu HAVING COUNT >1 vereinfachen mgl.?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL mit Details zu HAVING COUNT >1 vereinfachen mgl.?

    hallo,

    ich möchte identische Datensätze anzeigen und wissen welche ich bearbeiten möchte.

    Mein Ansatz war heute und auch einige male zuvor.
    a) Ermitteln welche Datensätze mehrfach vorkommen per GROUP BY und HAVING COUNT(*) bzw. COUNT(eindeutiges Feld) > 1

    b) Für die Anzeige welche Datensätze das sind SELECT auf Tabelle und dann im WHERE-Teil where in (SELECT von a) )

    Das hat zur Folge da ich in a) auf Grund der Gruppierung meine Primärschlüssel nicht habe und im WHERE-Teil von b) auf einen evtl. "ungenauen" Stringvergleich zurückgreifen muss. Wenn ich über mehrere Felder in a) gruppiere muss ich evtl. erst einen String zusammensetzen

    Bsp.:

    Code:
    SELECT * FROM Daten
    WHERE Feld2 + Feld3 + Feld4  IN
    SELECT Feld2 + Feld3 + Feld4  FROM Daten
    GROUP BY Feld2, Feld3, Feld4
    HAVING COUNT(*)  >1

    Komme ich auch über einen anderen Weg an die doppelten Datensätze?
    Zuletzt editiert von openshinok; 19.04.2010, 16:56. Reason: ein NOT im SQL zuviel

  • #2
    Baue das mit einer CTE. Müsste dann etwa so aussehen (komplett ungeprüft):

    Code:
    ;with tmp as (
    select feld1 as f1, feld2 as f2, feld3 as f3 from data
    group by feld1, feld2, feld3
    having count(*) > 1 )
    select daten.* from tmp
    join daten on feld1 = f1 and feld2 = f2 and feld3 = f3
    ... außer ich habe etwas falsch verstanden ...

    bye,
    Helmut

    Comment


    • #3
      Hallo,
      Originally posted by openshinok View Post
      ...und im WHERE-Teil von b) auf einen evtl. "ungenauen" Stringvergleich zurückgreifen muss. Wenn ich über mehrere Felder in a) gruppiere muss ich evtl. erst einen String zusammensetzen
      Warum den Weg über die Stringverknüpfung? Besser wäre doch:
      [highlight=sql]
      ...
      WHERE (Feld2, Feld3, Feld4) IN (
      SELECT Feld2, Feld3, Feld4
      FROM Daten
      ...
      [/highlight]

      oder falls dies nicht funktioniert über EXISTS:
      [highlight=sql]
      ...
      WHERE EXISTS (
      SELECT 1
      FROM Daten
      WHERE a.Feld2 = b.FELD2 AND a.Feld3 = b.FELD3 AND a.Feld4 = b.FELD4
      ...
      [/highlight]

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment

      Working...
      X