ne garder que certains enregistrements (COUNT ?) - SQL/NoSQL - Programmation
Marsh Posté le 23-02-2005 à 11:10:04
Tu dois pouvoir t'en tirer sans problèmes avec un "exists"
http://www.techonthenet.com/sql/exists.htm
[edit]
Avec un "in" aussi, d'ailleurs...
Marsh Posté le 23-02-2005 à 11:18:04
Voilà ma requête :
select DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen
from adhesions
Elle retourne plus d'enregistrements que la suivante, parce qu'il y a ades adhe_cod_cons et des adhe_cod_agen différents
select DISTINCT(adhe_no_adher)
from adhesions
J'aimerai avoir le différentiel.
Marsh Posté le 23-02-2005 à 11:20:18
On va pas te faire la requete, je t'ai filé un lien avec une explication du exists et des exemples, ça devrait te suffire à trouver!
Marsh Posté le 23-02-2005 à 11:46:18
manuhard a écrit : Ca ne marche pas à cause du DISTINCT |
t'as pas besoin de distinct pour la requête que tu veux...montre ce que tu as fait.
Marsh Posté le 23-02-2005 à 12:09:46
Le DISTINCT ne marche pas parce que je fais un
SELECT DISTINCT(champ1), champ2
FROM ma_table
GROUP BY champ1, champ2
HAVING (count(champ1)>1)
Et que la requête ne fait pas le HAVING (count(champ1)>1) sur le nombre d'enregistrements ramenés par la requête, mais sur tous les enregistrements de la table.
Ex :
données de ma table :
Champ 1 Champ 2
1 50
1 50
1 51
2 100
2 100
Données ramenées par la requête :
Champ 1 Champ 2
1 50
1 51
2 100
2 100
Dans ce cas, je ne voudrais ramener que les enregistrements "1", pas les "2". Car la différence porte sur le Champ2.
Marsh Posté le 23-02-2005 à 12:11:15
...donc tu t'en fous complètement de la solution que je t'ai proposée, si je comprends bien...
Marsh Posté le 23-02-2005 à 12:13:27
manuhard a écrit : Sorry je n'ai pas réussi avec ta solution :-( |
bah montre ce que tu as essayé...ce sera plus facile pour te corriger.
Marsh Posté le 23-02-2005 à 12:21:39
Voici ma requête avec EXISTS :
SELECT DISTINCT(adhe_no_adher)
FROM ADHESIONS T1
WHERE NOT EXISTS (SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen
FROM ADHESIONS T2
WHERE T1.rowid = T2.rowid);
J'ai plus d'enregistrements dans la table T2, que dans la table T1.
Mon but est de faire le différentiel entre la table T1 :
SELECT DISTINCT(adhe_no_adher)
FROM ADHESIONS T1
et la table T2 :
SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen FROM ADHESIONS T2
Sachant que la différence est sur les champs adhe_cod_cons et adhe_cod_agen, ce qui fait que j'ai des lignes en plus sur ma requête T2...
Marsh Posté le 23-02-2005 à 12:32:55
manuhard a écrit : Voici ma requête avec EXISTS : |
A priori tu as mal compris le fonctionnement du exists, là...tu essaies de t'en servir comme d'un 'not in' (qui doit fonctionner, d'ailleurs, en modifiant très peu ta requête).
Si j'ai bien compris, tu cherches à avoir les adhe_no_adher des enregistrements tels qu'il existe un autre enregistrement ayant le même adhe_no_adher, mais ayant un rowid différent...Il suffit de traduire ça simplement par
Code :
|
C'est bien ce que tu cherches à avoir? Si oui, regarde bien la requête (en considérant que je n'ai aps fait d'erreurs...), et tu verras que c'est une traduction très simple de ce que tu cherches...
Marsh Posté le 23-02-2005 à 12:43:31
J'ai peut-être trouvé, grâce à votre aide :
Cette requête me permet, je pense, d'avoir le différentiel entre 2 requêtes :
Code :
|
Marsh Posté le 23-02-2005 à 19:08:24
Une autre possibilité :
Code :
|
Marsh Posté le 23-02-2005 à 11:08:11
J'ai une requête, qui renvoit des enregistrements sous cette forme :
Champ 1 Champ2
1 53
1 54
2 100
3 110
J'aimerais ne ramener que ceux dont le Champ1
a plus d'une occurence, soit ici :
1 53
1 54
Comment faire cela ?
Merci d'avance !
manuhard