2009-05-03 38 views
2

Wie kann ich verhindern, dass doppelte Zeilen in einer Select-Abfrage ausgewählt werden?Doppelte Zeilen in Oracle

habe ich eine Tabelle mit den folgenden Feldern:

  • Name
  • Typ
  • benutzer1
  • benutzer2
  • user3
  • Datum

Meine Anfrage erfordert mich t o Daten für einen bestimmten Benutzer nur zu einer Zeit auswählen, die vom Benutzer am Frontend eingegeben wird. Sagen Benutzer 1, dann sollte die Select-Abfrage Daten nur für Benutzer1 abrufen.

ich so tue es zur Zeit:

select name,type,date from table1 order by user1; 

Aber ich bin immer redundante Zeilen im Ergebnis ??

was mache ich falsch? Wie vermeide ich diese doppelten Zeilen?

Bitte helfen ...

Antwort

4

Sie haben zwei Optionen SELECT DISTINCT oder verwenden Sie eine GROUP BY-Klausel. Sie haben auch eine Datumsspalte und in Oracle bedeutet das auch, dass es Zeit gibt, also sollten Sie die Datumsspalte abschneiden. Auch wenn Sie wissen, dass Zeit ist kein Teil der Einfügung trunkate sowieso. Es ist eine gute Übung, wenn Sie das Datum sehen, dass es Zeit hat.

Das nächste Problem, dem Sie begegnen werden, ist, dass Sie keine ORDER BY für eine Spalte haben können, die nicht Teil von SELECT ist.

Meine Empfehlung ist eine GROUP BY.


SELECT user1, name, type, TRUNC(date) date 
FROM Table1 
GROUP BY user1, name, type, TRUNC(date) 
ORDER BY user1 
6

Ich weiß nicht, ob ich völlig Ihre Frage bekommen. Aber ich werde trotzdem versuchen:

  1. Wenn Sie auf bestimmte Benutzer gefiltert werden soll, basierend auf Benutzereingaben try:

    select Name, Typ, "Datum" von table1 wo user = [was auch immer Ihre USER INPUTS] Reihenfolge nach Namen

  2. Wenn Sie eine andere Spalte (Benutzer1, Benutzer2, Benutzer3) auswählen möchten, je nach Benutzereingabe try:

    select Name, Typ, "Datum", zu dekodieren (iHR _USER_INPUT, 1, user1, 2, user2, 3, user3) von table1 Reihenfolge nach Namen

  3. Wenn Sie nur unterschiedliche Ergebnisse, versuchen

    select distinct Name, Typ verschieden wählen, "date", Benutzer1, Benutzer2 user3 von table1

Bitte tun ein Beispiel geben, damit wir entsprechend helfen. Viel Glück, gudluck.