Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2932 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] selection des donnees qui ne remplissent pas une condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] selection des donnees qui ne remplissent pas une condition

n°829860
Batman-Fr
powered by caféine
Posté le 23-08-2004 à 17:01:48  profilanswer
 

bonjour a tous :)
 
voila, j'ai 2 tables C et L et je dois selectionner des personnes dans C qui n'ont pas de reference dans L au dela d'une certaine date.
 
La date est dans L et je fais la liaison avec une cle commune aux 2 tables : L.REF et C.REF_ANN.
 
je reussi a selectionner les enregistrements de toutes les personnes de C ayant une reference dans L anterieure a la date mais je n'arrive pas a specifier qu'il ne faut pas qu'il y ait de reference au dela de cette date.
 
vous voyez comment faire :??: moi je bloque dessus et je suis pas specialiste sql :/
 
voila ma requete actuelle :
 

Code :
  1. SELECT L.REF, L.DATE_CREA, C.CONTACT,
  2. FROM C INNER JOIN L ON C.REF_ANN = L.REF
  3. WHERE (L.DATE_CREA < '01 / 06 / 2004') AND (L.REF LIKE 'LN%')
  4. ORDER BY L.DATE_CREA DESC


 
mille mercis d'avance :jap:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
mood
Publicité
Posté le 23-08-2004 à 17:01:48  profilanswer
 

n°829884
Snoopy71
Posté le 23-08-2004 à 17:14:13  profilanswer
 

Salut,
 
Je ne sais pas quel est ton SGBD...
 
Mais essaye un  
Select * from C where
C.ref NOT IN(select L.ref from L where periode à ne pas prendre)

n°829913
Beegee
Posté le 23-08-2004 à 17:39:08  profilanswer
 

Il suffit de faire une jointure externe de ce genre :
 

Code :
  1. SELECT L.REF, L.DATE_CREA, C.CONTACT,
  2.   FROM C
  3.   INNER JOIN L L1 ON C.REF_ANN = L1.REF
  4.   LEFT  JOIN L L2 ON C.REF_ANN = L2.REF
  5.   WHERE (L1.DATE_CREA < '01 / 06 / 2004')
  6.   AND (L1.REF LIKE 'LN%')
  7.   AND (L2.DATE_CREA >= '01 / 06 / 2004')
  8.   AND (L2.REF is NULL)
  9.   ORDER BY L.DATE_CREA DESC


 
En gros, si L2.REF est null, c'est qu'il n'y a pas de ligne dans L pour le contact, avec une date supérieure au 01/06/2004.
 
Y a sûrement des petites erreurs d'écriture, mais je te laisse les corriger.

n°829932
Batman-Fr
powered by caféine
Posté le 23-08-2004 à 17:53:31  profilanswer
 

je suis sous MS SQL SERVER
 
apparemment, il a du mal a digerer la requete :/


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°829939
Batman-Fr
powered by caféine
Posté le 23-08-2004 à 17:57:47  profilanswer
 

Beegee a écrit :

Il suffit de faire une jointure externe de ce genre :
 

Code :
  1. SELECT L.REF, L.DATE_CREA, C.CONTACT,
  2.   FROM C
  3.   INNER JOIN L L1 ON C.REF_ANN = L1.REF
  4.   LEFT  JOIN L L2 ON C.REF_ANN = L2.REF
  5.   WHERE (L1.DATE_CREA < '01 / 06 / 2004')
  6.   AND (L1.REF LIKE 'LN%')
  7.   AND (L2.DATE_CREA >= '01 / 06 / 2004')
  8.   AND (L2.REF is NULL)
  9.   ORDER BY L.DATE_CREA DESC


 
En gros, si L2.REF est null, c'est qu'il n'y a pas de ligne dans L pour le contact, avec une date supérieure au 01/06/2004.
 
Y a sûrement des petites erreurs d'écriture, mais je te laisse les corriger.


 
aucun resultat retourné  :sweat:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°830510
Batman-Fr
powered by caféine
Posté le 24-08-2004 à 09:59:19  profilanswer
 

:bounce:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°830627
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-08-2004 à 11:18:53  profilanswer
 

select C.*
FROM C
WHERE C.ID not in (select L.ID from L)
AND C.DATE_CREA > la_date
 
Pkoi se faire chier avec des trucs compliqués quand des trucs simples marchent :D
 
Pour remplacer le NOT IN qui est très lent, tu peux faire :
 
select C.*
FROM C
WHERE C.DATE_CREA > la_date
AND NOT EXISTS (SELECT NULL FROM L WHERE L.ID = C.ID)


Message édité par Arjuna le 24-08-2004 à 11:20:02
n°830642
Beegee
Posté le 24-08-2004 à 11:30:25  profilanswer
 

Arjuna : la date de création est dans la table L ;)
 
Donc en gros, s'il peut faire des EXISTS, ça donnerait :
 

Code :
  1. SELECT L.REF, L.DATE_CREA, C.CONTACT
  2.   FROM C
  3.   INNER JOIN L ON C.REF_ANN = L.REF
  4.   WHERE L.DATE_CREA < '01 / 06 / 2004'
  5.   AND L.REF LIKE 'LN%'
  6.   AND NOT EXISTS (SELECT NULL
  7.                   FROM L
  8.                   WHERE C.REF_ANN = L.REF
  9.                   AND L.DATE_CREA >= '01 / 06 / 2004')
  10.   ORDER BY L.DATE_CREA DESC;


Message édité par Beegee le 24-08-2004 à 11:30:51
n°830674
Batman-Fr
powered by caféine
Posté le 24-08-2004 à 11:59:06  profilanswer
 

Beegee a écrit :

Arjuna : la date de création est dans la table L ;)
 
Donc en gros, s'il peut faire des EXISTS, ça donnerait :
 

Code :
  1. SELECT L.REF, L.DATE_CREA, C.CONTACT
  2.   FROM C
  3.   INNER JOIN L ON C.REF_ANN = L.REF
  4.   WHERE L.DATE_CREA < '01 / 06 / 2004'
  5.   AND L.REF LIKE 'LN%'
  6.   AND NOT EXISTS (SELECT NULL
  7.                   FROM L
  8.                   WHERE C.REF_ANN = L.REF
  9.                   AND L.DATE_CREA >= '01 / 06 / 2004')
  10.   ORDER BY L.DATE_CREA DESC;



 
:jap:
 
mais apparemment, cette requette prend en compte des relations superieures au 01/06/2004 :( et je vois pas prq ...


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°830700
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-08-2004 à 12:33:50  profilanswer
 

Essaie ça (avec des alias pour L, mais je trouve ça bizarre)
 
select L1.REF, L1.DATE_CREA, C.CONTACT  
FROM C, L1
WHERE L1.DATE_CREA < la_date  
AND L1 LIKE 'LN%'
AND NOT EXISTS (SELECT NULL FROM L2 WHERE L2.ID = C.ID AND L2.DATE_CREA >= la_date)

mood
Publicité
Posté le 24-08-2004 à 12:33:50  profilanswer
 

n°830703
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-08-2004 à 12:34:30  profilanswer
 

Sinon, PKOI tu mets des espaces autour des "/" ? A mon avis, t'as un problème de formattage de la date là...

n°830706
Beegee
Posté le 24-08-2004 à 12:39:30  profilanswer
 

Arjuna a écrit :

Essaie ça (avec des alias pour L, mais je trouve ça bizarre)
 
select L1.REF, L1.DATE_CREA, C.CONTACT  
FROM C, L1
WHERE L1.DATE_CREA < la_date  
AND L1 LIKE 'LN%'
AND NOT EXISTS (SELECT NULL FROM L2 WHERE L2.ID = C.ID AND L2.DATE_CREA >= la_date)


 
Il te manque le nom de la table (L) :D
 
et +1 pour le formatage des dates ... c'est sûrement les espaces qui font que le résultat n'est pas correct ;)

n°830833
Batman-Fr
powered by caféine
Posté le 24-08-2004 à 14:14:52  profilanswer
 

pour le formatage, c'est sql server enterprise qui les ajoute automatiquement :(


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°830840
Batman-Fr
powered by caféine
Posté le 24-08-2004 à 14:20:43  profilanswer
 

je viens de faire un test et certaines ref en cause ont disparues mais j'ai retrouve des contacts qui ne devraient pas y etre
 
galere :fou:


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
n°831669
Batman-Fr
powered by caféine
Posté le 25-08-2004 à 11:08:36  profilanswer
 

:(


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] selection des donnees qui ne remplissent pas une condition

 

Sujets relatifs
Donnees mysql dans selectbox en relation avec une input boxMigration Access 97 vers SQL Server
inserer la date dans une base sqlinserer des données dans sql
Un variable dans le resultat d'une requete SQL[SGBD] PL/SQL qui kaput
[mySql] Script SQL de créationPartager des données entre plusieurs appli-web
SQL fonction conversion vers date 
Plus de sujets relatifs à : [SQL] selection des donnees qui ne remplissent pas une condition


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR