Doppelte Datensätze ausgeben!!
Steffi
- datenbank
0 Frank (no reg)0 Steffi0 Ilja0 Frank (no reg)1 Ilja
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
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
»
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
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
Na dann bring doch mal deinen Vorschlag. ;)
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