IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

sous requete SQL


Sujet :

Langage SQL

  1. #21
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    => Inverser autour des AND ne change rien
    => Les parenthèses ont une importance ENORME



    La valeur -1 n'est pas importante, si la base stocke -1 pour une case non cochée et 1 pour une cochée, ta requête doit chercher suivant ces valeurs. Il faut tout de même vérifier la valeur enregistrée par rapport à la valeur des coches hein

    genre 1 => true et -1 => false, en général false vaut 0, il y aura donc un souci. Tu peux nous donner le contenu d'une ligne avec des cases cochées et d'autres non cochées ?

  2. #22
    Invité
    Invité(e)
    Par défaut
    j'ai tenu compte des propositions de mercure. Le probleme c'est que le résultat m'affiche les chantiers que j'ai sélectionné avec mes criteres ET ceux en fonction de l'année.
    Le mieux c'est que vous voyez vous même la base parce que je pense pas m'expliquer aussi bien que vous le souhaiteriez.

    Pour info je travaille a partir du formulaire 21 et de la requete 1
    Dernière modification par Invité ; 12/05/2007 à 14h46.

  3. #23
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    benzin69,
    Si le renvoi d'une coche dans la case est égal à -1, alors teste par rapport à -1. Cela me semble quand même un peu bizarre de renvoyer -1 pour true, mais bon, si Access renvoie -1, alors va pour -1, na !

    Mindiell,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    => Inverser autour des AND ne change rien
    Je ne suis pas tout à fait d'accord, car SQL va tester le prédicat dans l'ordre où il est formulé, n'est-il pas ? Dans ces conditions pourquoi faire faire systématiquement 2 tests par SQL alors qu'un seul peut suffire: si la case n'est pas cochée, je ne teste pas le deuxième membre du prédicat.

  4. #24
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Eh bien pas tout à fait, si mes souvenirs sont bons, SQL teste les conditions à l'envers : en partant de la fin

    Pour le "change rien", je parle au niveau résultat, pas performance. Ca serait bien de voir, mais une base mono-utilisateur limitée (puisque sous Access), ca métonnerait qu'on arrive à voir la différence

  5. #25
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    ca métonnerait qu'on arrive à voir la différence
    Moi aussi !

    Je ne peux pas tester car je n'ai que la version 2000 d'Access. Je ne travaille pour ainsi dire jamais sous Access. J'ai essayé mais je me fais jeter car "mon" Access pas à un niveau suffisant.

    benzin69,
    tu dis:
    ... ET ceux en fonction de l'année
    No comprendo !

  6. #26
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    J'ai ta base sous les yeux :

    Comment les 2 premiers chantiers peuvent-ils être plus vieux que 5 ans, mais pas plus que 3 ?

    Sinon, je confirme : -1 c'est "coché", et 0 c'est "pas coché" aussi étrange que ca puisse paraitre

    Sinon, je te conseille plutôt d'utiliser un entier à 0 pour non et 1 pour oui, c'est plus "normalisé"...

  7. #27
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mindiell
    Comment les 2 premiers chantiers peuvent-ils être plus vieux que 5 ans, mais pas plus que 3 ?
    Les 2 premiers chantiers ont moins de 5 ans (inf5) mais n'ont pas moins de 3 ans (inf3)

    Pour ce qui est de changer la norme utilisée par access je ne préfère pas car j'ai déjà du mal a comprendre ce que je fais...(et il y a aussi une part de flemme )

  8. #28
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Citation Envoyé par benzin69
    Les 2 premiers chantiers ont moins de 5 ans (inf5) mais n'ont pas moins de 3 ans (inf3)

  9. #29
    Invité
    Invité(e)
    Par défaut
    j'ai dit une boulette?

  10. #30
    Invité
    Invité(e)
    Par défaut
    sinon j'avais tenté de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [reste du code] IN (( Select * From CHANTIER where CHANTIER.inf3)=[PARAMETRE].[inf3]) AND((PARAMETRE.inf3)=-1)) OR  CHANTIER.inf5 IN (SELECT * From CHANTIER WHERE((CHANTIER.inf5)=[PARAMETRE].[inf5]) AND ((PARAMETRE.inf5)=-1))
    ou bien ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and CHANTIER.inf3 IN (( Select * From CHANTIER where CHANTIER.inf3)=[PARAMETRE].[inf3]) AND((PARAMETRE.inf3)=-1)) OR  CHANTIER.inf5 IN (SELECT * From CHANTIER WHERE((CHANTIER.inf5)=[PARAMETRE].[inf5]) AND ((PARAMETRE.inf5)=-1))
    mais sans succès, ma requête ,n'affichait plus rien du tout

  11. #31
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    Citation Envoyé par benzin69
    j'ai dit une boulette?
    Non, non ! J'ai juste honte de pas avoir compris ton champ

  12. #32
    Invité
    Invité(e)
    Par défaut
    c'est pas grave faut pas avoir honte. Sinon vous avez d'autres idées, parceq que ça me déprime

  13. #33
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut re
    Je répète.

    Tu disais:
    j'ai tenu compte des propositions de mercure. Le probleme c'est que le résultat m'affiche les chantiers que j'ai sélectionné avec mes criteres ET ceux en fonction de l'année.
    Tu obtenais au moins quelque chose...

    Ce que je ne comprendspas, c'est cette histoire de "fonction de l'année", je ne vois pas à quoi ça correspond dans la requête ci-dessous :
    ...
    WHERE (
    (PARAMETRE.Routes = 1 and CHANTIER.Routes = PARAMETRE.Routes )
    OR (PARAMETRE.Villes = 1 and CHANTIER.Villes = PARAMETRE.Villes )
    OR (...)
    OR (PARAMETRE.PlantationBerge = 1 and CHANTIER.PlantationBerge = PARAMETRE.PlantationBerge )
    )
    AND ( PARAMETRE.inf3 = 1 AND CHANTIER.inf3 = PARAMETRE.inf3 )
    OR (PARAMETRE.inf5 = 1 AND CHANTIER.inf5 = PARAMETRE.inf5 )

  14. #34
    Invité
    Invité(e)
    Par défaut
    le truc c'est que admettons je selectione route en critère. Je vais avoir tous les chantiers avec route en critère.Maintenant si je coche en plus la case moins de 3 ans. je devrais avoir que les chantier avec route ayant moins de 3 ans. or pour le moment j'ai tous les chantiers qui ont route mais aussi ceux qui ont moins de 3 ans (en n'ayant pas route comme critère)

  15. #35
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Essaie, en ajoutant les ( ) rouges :
    ...
    AND ( ( PARAMETRE.inf3 = 1 AND CHANTIER.inf3 = PARAMETRE.inf3 )
    OR ( PARAMETRE.inf5 = 1 AND CHANTIER.inf5 = PARAMETRE.inf5 ) )

  16. #36
    Invité
    Invité(e)
    Par défaut
    toujours aucun changement...

  17. #37
    Invité
    Invité(e)
    Par défaut
    comment écrire la sous requete qui va bien? si quelqu'un a une idée chui preneur

  18. #38
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Et si tu simplifies ta clause WHERE ainsi ( Suppression des parenthèses ! ) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE PARAMETRE.Routes = -1 AND CHANTIER.Routes = PARAMETRE.Routes 
       AND  PARAMETRE.inf3     = -1 AND CHANTIER.inf3     = PARAMETRE.inf3

    Obtiens-tu le résultat escompté ?

  19. #39
    Invité
    Invité(e)
    Par défaut
    nan ça ne marche toujours pas car il considère l'année comme un critère à part entière au même titre que route ou autre chose...c'est pourquoi j'avais tenté de faire un sous select pour apporter une condition sur le resultat...(pas trop clair désolé)

  20. #40
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE PARAMETRE.Routes = -1 AND CHANTIER.Routes = PARAMETRE.Routes 
       AND  PARAMETRE.inf3     = -1 AND CHANTIER.inf3     = PARAMETRE.inf3
    Dans l'expression ci-dessus et dans la mesure où PARAMETRE.Routes correspond à la case qui est cochée (-1),
    comment CHANTIER.Routes peut-il être aussi égal à PARAMETRE.Routes ?

    Autrement dit, si je poursuis dans ce sens, le prédicat SQL WHERE ci-dessus pourrait également se lire de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE PARAMETRE.Routes = -1 AND CHANTIER.Routes = -1
       AND  PARAMETRE.inf3     = -1 AND CHANTIER.inf3     = -1  ?
    Peux-tu l'expliquer ?

Discussions similaires

  1. Sous - sous - requete SQL
    Par janjannaj dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2011, 08h21
  2. Sous requetes SQL
    Par Invité dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/09/2009, 19h22
  3. sous requete SQL
    Par onet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/05/2009, 10h21
  4. Plusieurs sauvegardes d'une sous-requete SQL
    Par at_first dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 04/12/2006, 17h52
  5. Sous-requetes SQL Oracle MsQUERY
    Par CHRISTOPHE_86 dans le forum Oracle
    Réponses: 1
    Dernier message: 11/09/2006, 20h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo