Comment éviter les doublons d'une colonne en utilisant distinct?
Je souhaite récupérer les passeports de la table RELATION qui n'existe pas vers la table PERSON. Cela fonctionne en utilisant le NOT EXISTS.
Mais je veux aussi imprimer le relID (peu importe lequel de chaque passeport).
ce sont mes tableaux: p >
RELATION
select distinct passport from RELATION where not exists(select 1 from PERSON where PERSON.passport= RELATION.passport)
Table PERSON:
relID passport 1 400000V 6 823972O
Voici le résultat que je veux.
XXX
C'est ma requête:
id passport 1 342342X 2 3333333T 3 1111111W
Si j'ajoute la colonne relID à la sélection, j'obtiens des valeurs en double du passeport.
Je veux seulement obtenir un PASSEPORT unique avec l'un de leurs identifiants.
5 Réponses :
Utilisez simplement l'agrégation:
select max(relid), passport from relation group by passport;
Je ne comprends pas ce que la table person
a à voir avec la question.
Parce que je veux seulement obtenir les passeports qui n'apparaissent pas à la table PERSONNE. Pour cela, j'ai besoin d'utiliser un NOT EXISTS.
utilisez min ()
select min(relID),passport from table group by passport
L'ajout d'une clause group by devrait aider: -
sélectionnez min (relID), passeport
de RELATION
où n'existe pas (sélectionnez 1 dans PERSON où PERSON.passport = RELATION.passport)
grouper par passeport;
Vous devez utiliser NOT EXISTS deux fois, pour la table PERSONNE et la table RELATION:
> RELID | PASSPORT > ----: | :------- > 1 | 400000V > 6 | 823972O
si la date est unique pour chaque passeport.
Consultez la démo .
Résultats:
select r.relid, r.passport from RELATION r where not exists ( select 1 from PERSON where passport = r.passport ) and not exists ( select 1 from RELATION where passport = r.passport and "date" > r."date" )
Utilisez un OUTER JOIN, en vérifiant si le champ PASSPORT dans la table jointe est NULL, ce qui indique que la valeur PASSPORT de RELATION n'existe pas dans PERSON:
SELECT r.PASSPORT, MIN(r.RELID) FROM RELATION r LEFT OUTER JOIN PERSON p ON p.PASSPORT = r.PASSPORT WHERE p.PASSPORT IS NULL GROUP BY r.PASSPORT ORDER BY r.PASSPORT