2016-04-25 17 views
0

Ich suchte nach fast einer Stunde, um mein Problem zu lösen, aber ich kann nichts finden.Postgresql Check für doppelte Einträge

So:

ich eine Tabelle mit dem Namen s (Lieferanten) erstellt, in dem einige Lieferanten für Teile aufgeführt sind, sieht es wie folgt aus:

insert into S(sno, sname, status, city) 
    values ('S1', 'Smith', 20, 'London'), 
     ('S2', 'Jones', 10, 'Paris'), 
     ('S3', 'Blake', 30, 'Paris'), 
     ('S4', 'Clark', 20, 'London'), 
     ('S5', 'Adams', 30, 'Athens'); 

Jetzt möchte ich diese Tabelle überprüfen, für doppelte Einträge in die spalte "city", also wäre das London und Paris und ich möchte es nach dem sno sortieren und ausdrucken.

Ich weiß, dass es ein bisschen schwieriger in Postgres als in mySQL ist und ich versuchte, es wie folgt aus:

SELECT sno, COUNT(city) AS NumOccurencies FROM s GROUP BY sno HAVING (COUNT (city) > 1); 

Aber alles, was ich bekommen, ist eine leere Tabelle :(ich verschiedene Möglichkeiten ausprobiert, aber es ist immer das gleiche. Ich weiß nicht, was ich tun soll, um ehrlich zu sein. Ich hoffe, dass einige von euch mir hier helfen können :).

Grüße Max

+0

auch vorsichtig sein, um Unterschiede bei zu überprüfen. London ist nicht dasselbe wie London für postgresql. – StingyJack

Antwort

0

Sie darüber nach hinten ein wenig zu denken. Durch die Gruppierung nach sno finden Sie alle diese Zeilen mit der gleichen sno, nicht die gleiche city. Versuchen Sie stattdessen:

SELECT 
    city 
FROM 
    S 
GROUP BY 
    city 
HAVING 
    COUNT(*) > 1 

Sie dann, dass als Unterabfrage verwenden können, um die Zeilen zu finden, die Sie wollen:

SELECT 
    sno, sname, status, city 
FROM 
    S 
WHERE 
    city IN 
    (
     SELECT 
      city 
     FROM 
      S 
     GROUP BY 
      city 
     HAVING 
      COUNT(*) > 1 
    ) 
Verwandte Themen