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

SQL Firebird Discussion :

Left Join et "no fetch current record"


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 34
    Par défaut Left Join et "no fetch current record"
    Bonjour,

    J'ai une requête comportant une jointure sur 4 tables et 4 left join. Je l'ai écrite sans soucis d'ordre dans un premier temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select ...
    from T1, T2, T3, T4
    left join T5 on T5.ID = T1.ID5
    left join T6 on T6.ID = T1.ID6
    left join T7 on T7.ID = T4.ID7
    left join T8 on T8.ID = T4.ID8
    where ...
    Tout va bien (je suis sur interbase) jusqu'à la mise en production sur firebird.

    le message d'erreur suivant "no fetch current record".

    A force de test je me suis rendu compte que la requête sous cette forme ne provoquait pas l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select ...
    from T1
    left join T5 on T5.ID = T1.ID5
    left join T6 on T6.ID = T1.ID6,
    T4
    left join T7 on T7.ID = T4.ID7
    left join T8 on T8.ID = T4.ID8,
    T2, T3
    where ...
    Ma question donc, est-ce qu'il y a un ordre dans les left join ie. est-ce qu'il faut qu'il précèdent la table sur laquelle on fait la jointure.
    Si oui pourquoi cela fonctionne sur Interbase.
    Et que ce passe-t-il si on fait des jointures plus complexes par exemple avec un "and" dans le premier left join.

    Enfin pour faire plus général est-ce que quesqu'un a plus d'information sur ce sujet.

    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    tu es sûr de ce que tu nous as indiqué ?
    ta table T3 se ballade toute seule ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 34
    Par défaut
    Oui en fait il y a des jointures réalisées dans le "where"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE T1.ID4 = T4.ID
    AND T1.ID2 = T2.ID
    AND T1.ID3 = T3.ID
    Désolé du manque de précision

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    désolé de te contredire mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T1.ID
    FROM T1, T2, T3, T4
    LEFT JOIN T5 ON T5.ID = T1.ID5
    LEFT JOIN T6 ON T6.ID = T1.ID6
    LEFT JOIN T7 ON T7.ID = T4.ID7
    LEFT JOIN T8 ON T8.ID = T4.ID8
    WHERE T1.ID4 = T4.ID
    AND T1.ID2 = T2.ID
    AND T1.ID3 = T3.ID
    fonctionne très bien que ce soit sous FB 1.5 ou FB2.0

  5. #5
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 34
    Par défaut
    Oui effectivement ça fonctionne. Bon j'ai voulu être plus clair en remplaçant le nom de tables alors je copie la requête telle quelle est dans notre base avec les vrai nom et là j'ai bien l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT c.IDcompte
    FROM Tcompte c, Tbanque b, Tragence a, Tsociete s 
    left join Trcontact h on h.idagence = c.idagence and h.fcontactpivot = 1
    left join Tpays p on s.IDpays = p.IDpays
    left join Tdevise d on c.Iddevise=d.idDevise
    left join VRLISTE_FR lfr on lfr.idlibelle=s.idforme_juridique
    WHERE c.IDbanque = b.IDbanque 
    and c.IDsociete = s.IDsociete 
    and a.idagence = c.idagence

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    et bien essaie avec autre chose que ton antique outil pas forcément complètement compatible Firebird
    commence par isql de firebird puis Flamerobin ou Ibexpert, ou tout autre outil de ton choix

Discussions similaires

  1. Left Join Fetch + Critère
    Par Manopower dans le forum Hibernate
    Réponses: 4
    Dernier message: 30/12/2010, 16h47
  2. LazyInitializationException avec un left join fetch
    Par Maverick_ch dans le forum Hibernate
    Réponses: 0
    Dernier message: 12/03/2010, 16h22
  3. [HQL] Left Join fetch et exists
    Par LittleBean dans le forum Hibernate
    Réponses: 3
    Dernier message: 23/10/2009, 15h41
  4. problème "left join fetch" recup de données associées
    Par ddv_again dans le forum Hibernate
    Réponses: 2
    Dernier message: 19/12/2006, 17h29

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