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 Oracle Discussion :

Résultat doublé d'un select [9i]


Sujet :

SQL Oracle

  1. #1
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut Résultat doublé d'un select
    Bonjour,

    Je suis confronté à un problème assez bizarre chez un client:
    J'ai une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Champ1,Champ2 from MaTable1
    Join MaTable 2 on ...
    Join MaVue1 on ...
    Where ...
    Avec certaines combinaisons de filtres (filtres simples de type AND Value=3), les enregistrements retournés sont doublés.

    Ex:
    - sans Where: liste normale sans doublon.
    - avec Where: doublon.

    Savez-vous d'où cela pourra venir?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Enregistrements doublé égal mauvaises jointures à 99%. 1% peut être imputé aux bugs Oracle sur les requêtes ANSI. Pour tester c'est simple récrivez la requête avec jointures Oracle non ANSI.
    Sinon essayez de fabriquer un jeux de test de qui vous arrive.

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Les jointures sont bonnes. Si cela était un problème de jointure j'aurai un produit carthésien sur la requête sans filtre. Là j'ai plus de résultat avec certains filtres (condition WHERE) que sans.

    Je n'ai le problème que chez un client, pour le jeu de tests cela va être compliqué. Je vais voir pour les requêtes non ANSI, mais cela ne me rassure pas pour la fiabilité de mes résultats.

    Merci.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Postez la requete, et le code des vues auxquelles elle accède...

  5. #5
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Je n'ai pas de problème au niveau de la structure de la vue.
    Toutes les jointures sont faite sur des clés simples.
    Voici les données que j'ai et que je n'explique pas:

    Contenu de la vue pour CUS_ID = 51.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT box_id from VIEW_BOXES 
    WHERE VIEW_BOXES.CUS_ID = 51
    Citation Envoyé par resultat
    BOX_ID
    1101103
    807721
    Résultat anormal de la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ste_load_details.barcode_id,Count(*) 
    FROM STE_LOAD_DETAILS 
    INNER JOIN VIEW_BOXES ON VIEW_BOXES.BOX_ID = STE_LOAD_DETAILS.BOX_ID 
    WHERE VIEW_BOXES.CUS_ID = 51
    GROUP BY STE_LOAD_DETAILS.BARCODE_ID
    ORDER BY 2 desc
    Citation Envoyé par resultat
    BARCODE_ID COUNT(*)
    ...
    961413300011 2
    ...

    Si on rajoute une condition, résultat ok.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ste_load_details.barcode_id,Count(*) 
    FROM STE_LOAD_DETAILS 
    INNER JOIN VIEW_BOXES ON VIEW_BOXES.BOX_ID = STE_LOAD_DETAILS.BOX_ID 
    WHERE VIEW_BOXES.CUS_ID = 51
    AND BARCODE_ID='961413300011'
    GROUP BY STE_LOAD_DETAILS.BARCODE_ID
    ORDER BY 2 desc
    Citation Envoyé par resultat
    BARCODE_ID COUNT(*)
    961413300011 1

    Si on enlève la condition, résultat ok.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT ste_load_details.barcode_id,Count(*) 
    FROM STE_LOAD_DETAILS 
    INNER JOIN VIEW_BOXES ON VIEW_BOXES.BOX_ID = STE_LOAD_DETAILS.BOX_ID 
    GROUP BY STE_LOAD_DETAILS.BARCODE_ID
    ORDER BY 2 desc


    Citation Envoyé par resultat
    BARCODE_ID COUNT(*)
    ...
    961413300011 1
    ...
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    1/ Essaye de réécrire la requête sans la norme ANSI comme l'a suggéré Mnitu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ste_load_details.barcode_id,Count(*) 
    FROM STE_LOAD_DETAILS, VIEW_BOXES 
    WHERE VIEW_BOXES.BOX_ID = STE_LOAD_DETAILS.BOX_ID 
    AND VIEW_BOXES.CUS_ID = 51
    GROUP BY STE_LOAD_DETAILS.BARCODE_ID
    ORDER BY 2 DESC
    2/ Essaye de virer le group by afin de savoir pourquoi Oracle te ramène 2 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ste_load_details.*, VIEW_BOXES.*
    FROM STE_LOAD_DETAILS 
    INNER JOIN VIEW_BOXES ON VIEW_BOXES.BOX_ID = STE_LOAD_DETAILS.BOX_ID 
    WHERE VIEW_BOXES.CUS_ID = 51
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Pas d'amélioration avec les requêtes non ANSI.

    Pour le group by, je l'ai juste rajouté pour avoir des résultats plus lisibles. Sans le group by, le résultat est le même.

    Je vais récupérer la base de mon client pour la tester sur notre serveur en 9i, et si je reproduis le problème sur une 11g et 12c.

    Merci pour l'aide. Je reviendrais dès que j'aurai des nouvelles.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Pour le résultat des tests:
    - import des données sur une Oracle 11g: le problème ne se reproduit pas.
    - import des données sur une Oracle 9i: le problème se reproduit. La suppression a résolu le problème. Le recalcul des statistiques ne reproduit pas le problème.

    Je n'ai pas trouvé la cause exacte, mais le problème est résolu pour le moment.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

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

Discussions similaires

  1. Comment afficher le résultat (double) d'une servlet?
    Par maxinformatique dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 25/05/2007, 16h12
  2. Réponses: 2
    Dernier message: 14/05/2007, 17h18
  3. [MySQL] comment exploiter le résultat d'une requête SELECT ?
    Par @min@ dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/04/2007, 21h52
  4. problème avec les résultats d'une requête select top1
    Par kariiim dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2007, 16h05
  5. [MySQL] Pagination du résultat de la requête select
    Par soussan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/06/2006, 17h30

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