2016-03-26 12 views
0

I eine Tabelle ist Test, mit den Attributen: ID, Früchte.SQL Gruppe von Attribut und Ergebnisse zeigen, wenn es mehr als eine in dieser Gruppe

Wir haben folgende Inhalte in der Tabelle:

id, fruits 

1, Apple 
2, Banana 
3, Apple 

ich eine Abfrage, die Gruppen dieses durch die Früchte (Äpfel in einer Gruppe, Bananen in einem anderen) mochte und kehrt, wenn es mehr als 1 ist in diese Gruppe.

So zum Beispiel oben, sollte die Abfrage zurückgeben:

1, Apple 
3, Apple 

Hier ist, was ich bisher:

SELECT * 
FROM testing 
GROUP BY 'fruits' 
    HAVING COUNT(*) > 1 
ORDER BY 'id' 

Diese Abfrage gibt nur eine der Äpfel.

Danke für jede Hilfe! Toby.

Antwort

1

Sie eine Unterabfrage verwenden können, die Duplikate zu finden, und eine äußere Abfrage, die Ihre Reihen bekommt;

SELECT * FROM testing 
WHERE fruits IN (
    SELECT fruits FROM testing 
    GROUP BY fruits HAVING COUNT(*)>1 
) 
ORDER BY id 

An SQLfiddle to test with.

1

Sie haben wieder an den Tisch zu verbinden, um das gewünschte Ergebnis zu erhalten:

SELECT t1.* 
    FROM testing AS t1 
    JOIN (
     SELECT fruits 
     FROM testing 
     GROUP BY fruits 
     HAVING COUNT(*) > 1 
    ) AS t2 ON t1.fruits = t2.fruits 
    ORDER BY t1.id 
2

Eigentlich ist der effizienteste Weg, dies zu tun ist wahrscheinlich exists zu verwenden:

select t.* 
from testing t 
where exists (select 1 
       from testing t2 
       where t2.fruits = t.fruits and t2.id <> t.id 
      ); 

Für eine optimale Leistung Sie auf testing(fruits, id) einen Index möchten.

+0

Können Sie sich bitte [meine Frage] (http://stackoverflow.com/questions/36246530/how-can-i-put-a-condition-on-the-way-of-join) ansehen? Um ehrlich zu sein, habe ich meine Frage nur gestellt, um * Ihre Meinung * darüber zu sehen. – stack