2009-05-03 7 views
2

Comment puis-je empêcher la sélection de lignes en double dans une requête de sélection?Lignes en double dans Oracle

J'ai une table avec les champs suivants:

  • Nom
  • Type
  • user1
  • utilisateur2
  • user3
  • Date

Ma requête me demande t o sélectionnez les données pour un utilisateur particulier seulement à un moment qui est entré par l'utilisateur à l'extrémité avant. Dites l'utilisateur entre 1, alors la requête de sélection devrait recevoir des données pour l'utilisateur 1 seulement.

Je ne suis en train de faire comme ceci:

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

Mais je reçois des lignes redondantes dans le résultat ??

Qu'est-ce que je fais mal? Comment éviter ces lignes en double?

S'il vous plaît aider ...

Répondre

4

Vous avez deux options SELECT DISTINCT ou utilisez une clause GROUP BY. Vous avez également une colonne de date et dans Oracle qui signifie également qu'il y a du temps pour être sûr que vous devriez tronquer la colonne de date. Même si vous savez que le temps ne fait pas partie de l'insert tronqué de toute façon. C'est une bonne pratique que lorsque vous voyez date, vous considérez qu'il a le temps.

Le prochain problème que vous rencontrerez est que vous ne pouvez pas avoir un ORDER BY sur une colonne qui ne fait pas partie du SELECT.

Ma recommandation est un GROUP BY.


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

Je ne sais pas si je suis tout à fait votre question. Mais je vais essayer quand même:

  1. Si vous souhaitez filtrer certains utilisateurs basé sur essai d'entrée utilisateur:

    select name, type, « date » de table1 où l'utilisateur = [QUELQUE VOTRE UTILISATEUR ENTREES] ordre par nom

  2. Si vous voulez choisir une autre colonne (utilisateur1, utilisateur2, user3) selon essai d'entrée utilisateur:

    select name, type, "date", decode (VOTRE _USER_INPUT, 1, user1, 2, utilisateur2, 3, user3) de table1 Trier par nom

  3. Si vous juste voulez des résultats différents, essayez select distinct

    sélectionnez nom distinct, le type, "date", utilisateur1, utilisateur2, user3 de table1

S'il vous plaît faire donner un exemple afin que nous puissions aider en conséquence. Bonne chance, gudluck.

Questions connexes