Dubletten ermitteln

derDotzi1982

Neuer Benutzer
Beiträge
1
Hallo "datenbankforum"-Community,

folgendes Anliegen habe ich: Die Tabelle "Belege" enthält Belege vom Typ "Angebot" und "Auftrag". Jeder dieser Belege hat eine Belegnummer.

Ich möchte auf etwaige Dubletten prüfen:

select * from BELEGE
group by BELEGNUMMER having count(*) > 1
order by BELEGNUMMER

Das Ergebnis ist:
Nr.: 4711 // Typ: Angebot
Nr.: 4711 // Typ: Auftrag
Nr.: 4712 // Typ: Angebot
Nr.: 4712 // Typ: Auftrag

Aber hierbei handelt es sich nicht um "Dubletten" im eigentlichen Sinne. D. h. wie kann ich die Abfrage anpassen, sodass diese den Typen mit berücksichtigt.

Habe es wie folgt versucht, aber gescheitert:

select * from BELEGE AS PRIM
join BELEGE as SEC on PRIM.BELEGNUMMER = SEC.BELEGNUMMER
where PRIM.BELEGART <> SEC.BELEGART
group by PRIM.BELEGNUMMER having count(*) > 1

Ich bin auch nicht mit einem Sub-Select weiter gekommen ... wie kann ich das bewerkstelligen?

Vielen Dank schon mal im Voraus.
 
Werbung:
Dein gezeigtes SQL ist offenbar syntaktisch falsch. Es wäre hilfreicher, Du zeigst reale Tabellendefinition, reale Abfrage.

Code:
test=*# \d dotzi1982
             Table "public.dotzi1982"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 nr     | integer |           |          |
 typ    | text    |           |          |

test=*# select * from dotzi1982 group by nr ;
FEHLER:  Spalte »dotzi1982.typ« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
LINE 1: select * from dotzi1982 group by nr ;
               ^
test=*#
 
vielleicht hilft ja schon:

Code:
test=*# select * from dotzi1982 ;
  nr  |   typ   
------+---------
 4711 | angebot
 4711 | auftrag
 4712 | angebot
 4712 | auftrag
(4 rows)

test=*# select nr, count(1) from dotzi1982 group by nr, typ having count(1) > 1;
 nr | count
----+-------
(0 rows)

test=*# insert into dotzi1982 values (4712, 'auftrag');
INSERT 0 1
test=*# select nr, count(1) from dotzi1982 group by nr, typ having count(1) > 1;
  nr  | count
------+-------
 4712 |     2
(1 row)

test=*# select nr, typ, count(1) from dotzi1982 group by nr, typ having count(1) > 1;
  nr  |   typ   | count
------+---------+-------
 4712 | auftrag |     2
(1 row)

test=*#
 
Werbung:
Wenn dein erster Select schon grundsätzlich funktioniert hat würde eventuell eine Erweiterung des GROUP BY schon ausreichen um dein Wunschergebnis zu bekommen.
Code:
select * from BELEGE
group by BELEGNUMMER,TYP having count(*) > 1
order by BELEGNUMMER
Aber Select * funktioniert in einem GROUP BY natürlich gar nicht. Handelt es sich eventuell um ein älteres MySQL und nicht um MSSQL?
 
Zurück
Oben