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

Bases de données Delphi Discussion :

Associer une autre ligne si jointure manquante


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut Associer une autre ligne si jointure manquante
    Bonjour,

    Est-il possible de spécifier une ligne par défaut à joindre quand il n'y a pas de correspondance dans une jointure ?

    Ex:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT NomProduit, t2.NomPays
    FROM Produits LEFT JOIN Pays AS t2
    ON PaysID=t2.ID
    Si PaysID n'a pas de correspondance dans t2, la requête va renvoyer des null. Dans ce cas, je voudrais faire une jointure sur t2.ID=valeurfixe, un truc dans le genre (mais ça ne marche pas bien sûr):
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT NomProduit, t2.NomPays
    FROM Produits LEFT JOIN Pays AS t2
    ON PaysID=t2.ID OR t2.ID=0
    -> Si la requête trouve bien un PaysID=t2.ID alors association normale" sinon association sur t2.ID=0

    Une idée ?

  2. #2
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    as-tu essayer ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT NomProduit, t2.NomPays
    FROM Produits LEFT JOIN Pays AS t2
    ON PaysID=t2.ID
    WHERE (t2.ID IS NOT NULL)

  3. #3
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    @freud: Là il me semble que cela revient à faire un inner join.

    Sinon je ne vois qu'une requête Union pour arriver à ce résultat.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT
      T1.NomProduit, T2.NomPays
    FROM
      Produits AS T1 INNER JOIN Pays AS T2
      ON T1.PaysID = T2.ID
    UNION
    SELECT
      T1.NomProduit, T2.NomPays
    FROM
      Produits AS T1 LEFT OUTER JOIN Pays AS T2
      ON T2.PaysID = 0
    WHERE 
      T1.PaysID IS NULL;
    Mais je dirais que tu ne te simplifies pas la tâche. A ta place je définirais le champ PaysID de Produits à NOT NULL avec comme valeur par défaut 0.
    Il doit d'ailleurs y avoir une relation entre Produits et Pays et ceci assurerait l'intégrité référentielle.
    Et dans ce cas un simple INNER JOIN entre les 2 tables te donnerait le même résultat.

    @+ Claudius

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    En complément des info. précédentes en SQL SERVER tu
    peux remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON ISNULL (T2.PaysID,0) = 0
    ce qui veut dire : que T2.PaysID soit à NULL ou à 0

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Merci mais ça ne marche pas :-\
    Mon exemple n'est peut-être pas bon, je vais essayer d'expliquer plus clairement avec quelque chose qui se rapproche plus de la réalité:

    - ma première table contient une liste de nom de fichiers avec un champ qui sert à identifier leur format (ex: doc, jpg, txt, iso, ...)
    - ma deuxième table liste les plugins qui sont utilisés pour afficher le contenu de ces fichiers.

    -> Si un plugin spécifique existe pour le fichier sélectionné il sera utilisé pour charger le fichier,
    -> Si le plugin spécifique n'existe pas, un plugin générique sera utilisé pour faire un affichage "brut" du fichier.

    J'ai donc besoin de rediriger les fichiers de formats *non gérés* (entrées de la première table) vers un certain plugin (deuxième table).
    Sachant, Cl@udius, que les entrées de la première table ont toutes un champ "format" non null et que la table des plugins ne contient pas forcément d'entrée correspondant à chaque "format".

    Mais bon, ne vous prenez pas trop la tête, je crois que je vais m'y prendre autrement...

    Merci encore !

Discussions similaires

  1. selectionner une autre ligne dans listbox
    Par nicht dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/04/2009, 12h29
  2. comment ajouter une autre ligne dans un texbox
    Par enretard dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/07/2008, 14h51
  3. Réponses: 2
    Dernier message: 26/12/2007, 10h00
  4. Additionner enregistrement avec une autre ligne
    Par aurelie83 dans le forum SQL
    Réponses: 2
    Dernier message: 03/09/2007, 10h06
  5. [VBA-E]Effacer ligne si une autre ligne est identique
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/08/2006, 13h41

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