Steffi: Doppelte Datensätze ausgeben!!

Hallo,

Die Abfrage soll mir die doppelten Datensätze ausgeben, sprich
1 Doppelter Datensatz  abc
1                      abc
ect. 2                 gg
     2                 gg

Ich habe drei Tabellen

1tbl=Hardware
id
Hadware_ID
Rechnername
Arbeitsgruppe
Domain

2tbl=Bios
id
Hardware_ID
Seriennummer
Modell

3tbl=Networks
id
Hardware_ID
MAC_Adresse
Speed

So mein Problem ist das als Vergleichsoperator nur die MAC Adresse in Frage kommen würde. Doch es kommen nicht die Datensätze raus die ich zum Test doppelt eingetragen habe.

Meine Abfrage
[code=sql]

select MACADDR,  count(MACADDR) As Anzahl
from networks
group by MACADDR
having count(MACADDR) > 1;

[/code]

Die id ist Auto-wert das wegen kann man die nicht als Operator verwenden, mit Distinct habe ich es auch schon ausprobiert, ich verzweifel noch. Hat jemand einen Vorschlag im Inet habe ich auch nicht wirklich was gefunden was mir weiter helfen könnte.

Danke im Voraus

MfG Steffi

  1. Hallo, dein JOINe dein Resultset von

      
    select MACADDR,  count(MACADDR) As Anzahl  
    from networks  
    group by MACADDR  
    having count(MACADDR) > 1;  
    
    

    wieder mit der Tabelle 'networks' anhand der MACADDR, quasi ungefähr so

      
    select n1.*  
    from networks n1  
    INNER JOIN (select MACADDRfrom networks  
                        group by MACADDR  
                        having count(MACADDR) > 1) n2  
    ON n1.MACADDR = n2.MACADDR  
    
    

    Das sollte dir _alle_ Doubletten mit Id aus networks geben

    Gruss, FFR

    1. »

      select n1.*
      from networks n1
      INNER JOIN (select MACADDRfrom networks
                          group by MACADDR
                          having count(MACADDR) > 1) n2
      ON n1.MACADDR = n2.MACADDR

        
        
      Vielen Dank, funktioniert Tadellos :)  
        
      ich wäre schon fast verzweifelt, wirklich vielen Dank  
        
      mfg Steffi
      
    2. moin,

      select n1.*
      from networks n1
      INNER JOIN (select MACADDRfrom networks
                          group by MACADDR
                          having count(MACADDR) > 1) n2
      ON n1.MACADDR = n2.MACADDR

        
      davon würde ich abraten, zum einen ist es nicht sehr lesefreundlich. zum anderen birgen JOINS immer die latente gefahr, dass die anzahl der gewünschten datensätze in der ergebnismenge nicht stimmt. das mag hier nicht der fall sein, aber es ist auch nur ein rat für guten sql code. eine unterabfrage in der WHERE klausel halte ich dies bezüglich für die bessere wahl.  
        
      Ilja
      
      1. Na dann bring doch mal deinen Vorschlag. ;)

        1. moin,

          Na dann bring doch mal deinen Vorschlag. ;)

          doubletten prüfung scheint gerade hier der renner zu sein. grundsätzlich gibt es verschiedene ansätze, auch immer ein wenig davon abhängig, nach welchen kriterien eine doublette definiert ist. ich habe den gleichen ansatz schon ein paar beiträge weiter unten geschrieben. im grunde genommen ist es recht einfach, hat nur die eine tabelle und eine entsprechende WHERE klausel mit einer korrelierten unterabfrage.

          select n1.*
          from networks n1
          WHERE EXISTS (SELECT NULL
                        FROM networks n2
                        WHERE n2.MACADDR = n1.MACADDR -- hier der abgleich auf doublette
                        AND n2.PrimaryKey <> n1.PrimaryKey -- nicht derselbe datensatz
                       )
          ORDER BY n1.MACADDR
          ;

          das ist auch schon alles, meiner meinung nach übersichtlicher und sprechender. aber das liegt auch immer in auge des betrachters.

          Ilja