2017-09-20 1 views
0

Ich habe eine Tabelle von Fragen Paare mit dem Schema derSQL: select Zeilen, die auf bestimmte Spalten eindeutig sind

id1  question1 id2 question2 
1123 q1   2  q2 
1123 q1   3  q3 
1123 q1   1231 q142 
2431 q12   1231 q142 

(ids nicht inkrementell sind und zufällig betrachtet werden)

Ich möchte wählen Tupel, die in den beiden id1 und id2 einzigartig sind, zum Beispiel für das obige Beispiel eine gewünschte Ausgabe könnte sein:

id1  question1 id2 question2 
1123 q1   2  q2 
2431 q12   1231 q142 

Ihnen im Voraus danken.

+1

SO keine freie Codierung Dienst ist. Sie müssen versuchen, das Problem selbst zu lösen. Wenn es nicht funktioniert, poste, was du versucht hast, und wir helfen dir, es zu beheben. Verwenden Sie GROUP BY, um die Daten nach diesen Spalten zu gruppieren, und COUNT (*), um zu zählen, wie viele Zeilen in der Gruppe enthalten sind. Wenn die Anzahl "1" ist, ist es einzigartig. – Barmar

+0

Ihre gewünschte Ausgabe stimmt nicht mit der Beschreibung überein. Warum ist 'id1 = 1123, id2 = 3' nicht in der Ausgabe? Es ist auch eine einzigartige Kombination. – Barmar

+0

, weil ID1 = 1123 derzeit angezeigt wird. Das Problem ist, dass ich nicht weiß, wie "distinct" für zwei Spalten getrennt zu verwenden ist. –

Antwort

1

Verwenden Sie verschachtelte Abfragen.

SELECT * 
FROM (SELECT * 
     FROM yourTable 
     GROUP BY id1) AS x 
GROUP BY id2 

Es ist jedoch unvorhersehbar, wie dies die Gruppierung tun wird. Wenn die Unterabfrage

id1  id2 
1123 1231 
2431 1231 

wählt dann wird das Endergebnis sein:

id1  id2 
1123 1231 

oder

id1  id2 
2431 1231 

Ich bin mir nicht sicher, wie es zu ändern, damit es das Ergebnis mit den meisten produziert mögliche Kombinationen.

0

können Sie Ranking als auch verwenden,

SELECT id1, 
     question1, 
     id2, 
     question2 
    FROM (SELECT CASE id1 
        WHEN @curType 
        THEN @curRow := @curRow + 1 
        ELSE @curRow := 1 AND @curType := id1 
       END rank, 
       id1, 
       question1, 
       id2, 
       question2 
      FROM q, 
       (SELECT @curRow := 0, @curType := '') r 
      ORDER BY id1, id2 
     ) t 
WHERE rank = 1 

Ergebnis

rank id1 id2 
1 1123 2 
1 2431 1231 
Verwandte Themen