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 :

problème exist(antiel) ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut problème exist(antiel) ?
    Bonjour à tous.

    Je bloque sur un truc et comme il y a plus d'idées dans plusieurs têtes que dans une seule, je vous soumets mon problème.

    Commençons par poser les données...

    J'ai deux tables dont voici les structures (les champs souligné sont les clés primaires et en gras les clés étrangères) :

    TBTYPE
    prefixe : texte(2)
    hasref : booleen
    posref : integer
    posval : integer
    lengthval : integer
    nom : texte(50)

    TBREF
    prefixe : texte(2)
    ref : texte(3)

    posval : integer
    lengthval : integer
    nom : texte(50)

    Ces tables servent à définir des bons de réductions.
    Mon problème est que, sur base d'un nom, je dois pouvoir récupérer le préfixe (champ prefixe) et la référence (champ ref) du bon. Jusque là, facile. Là où ça se corse, c'est que, si un bon a une référence (ce qui n'est pas toujours le cas), je dois aller chercher dans TBREF. Si un bon n'a pas de référence, je dois aller dans TBTYPE. Je ne dispose que du nom du bon.

    J'ai pensé à l'utiliser de EXIST (d'où le titre) mais je n'arrive à rien.

    Je ne sais pas si j'ai été clair. Si vous avez des questions, n'hésitez pas.

    Merci d'avance.

    Griftou.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Avant de commencer,

    Comment se fait il que {prefixe,ref} soit PK de TBREF alors que tu dis :
    si un bon a une référence (ce qui n'est pas toujours le cas)

    Ensuite
    je dois aller chercher dans TBREF. Si un bon n'a pas de référence, je dois aller dans TBTYPE. Je ne dispose que du nom du bon.
    Que dois tu aller chercher dans TBTYPE ?


    Dans tous les cas une jointure externe répond à ta demande qui n'est pas super claire malgré la structure des tables donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    FROM TBREF
    	LEFT JOIN TBTYPE 
    		ON TBREF.PREFIXE = TBTYPE.PREFIXE
    WHERE TBREF.nom LIKE ...
    Il reste le select et le like à compléter

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je vais préciser alors.

    J'identifie les bons de réductions par leur barcode.

    En général, le préfixe suffit. Je sais que tous les bons dont le barcode commence par "04" sont d'un type bien précis. Je trouve ça dans la table TBTYPE avec le champ préfixe valant "04", hasref valant false et nom qui est le nom du bon.

    Par contre, pour certain préfixe, par exemple "02", cela ne suffit pas. C'est la que la notion de référence entre en jeu.
    Dans ce cas-ci, dans TBTYPE, il y aura un record le préfixe "02", hasref à true et pas de nom car ce record ne définit pas précisément une sorte de bon.
    Lié à ce record par le préfixe, il aura un record dans TBREF avec le préfixe ("02" donc ici), la référence qui identifie spécifiquement ce bon par rapport à son préfixe et le nom du bon. Les autres champs ne sont pas important pour le problème qui nous occupe.

    Et donc, uniquement avec le nom du bon, je dois savoir dans quelle table chercher et suivant la table, récupérer 1 ou 2 champs.

    Est-ce plus clair ?

    Griftou.

    P.S. : Je ne pense pas que ta jointure fonctionnera puisque le nom ne sera pas toujours dans TBREF.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    FROM TBREF
    	RIGHT JOIN TBTYPE 
    		ON TBREF.PREFIXE = TBTYPE.PREFIXE
    WHERE COALESCE(TBREF.nom, TBTYPE.nom)  LIKE ...

  5. #5
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Ok, je ne connaissais pas "COALESCE". Ca m'a l'air bien utile pour ce cas.

    Mais mon raisonnement se bloque tjs au même endroit. Qu'est-ce que je dois mettre dans mon select ? Etant donné que dans un cas, je ne prend qu'un champ dans une table et dans l'autre, je prends 2 champs dans une autre table.

    Quels champs est-ce que je dois mettre? Tous ?

    C'est encore fort flou pour moi. Ca m'apprendra à ne dormir que 4h...

    Merci en tout cas !!

    Griftou.

    note pour plus tard : réviser le cours sur les jointures...

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TBTYPE.Prefixe + COALESCE(TBREF.nom, TBTYPE.nom)
    ...
    Un truc comme ça ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Exists in
    Par jlm22 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 04/08/2011, 17h13
  2. [VB6]problème modificaion projet existant
    Par gorgonite dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/03/2006, 09h16
  3. [MySQL] upload : problème fichiers existants dans la bdd ?
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/02/2006, 12h29
  4. Réponses: 8
    Dernier message: 26/01/2006, 15h47
  5. Problème "The specified service does not exist as an ..
    Par Rimak2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2005, 22h24

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