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 :

Requête (casse tête)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut Requête (casse tête)
    Bonjour à tous,

    j'ai fais une requête mais j'ai trouvé un bug, je vais essayé de vous donner le maximum de détails.

    J'ai une table

    T_ANNONCE (id_annonce)
    T_IMAGE(id_statut_image,#id_annonce)

    Je dois compter le nombre d'images dont le statut est > 0

    J'ai donc fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT AN.ID_ANNONCE, COUNT(*) 
    FROM ANNONCE AN, ANNONCE_IMAGE
    WHERE AN.id_annonce = ANNONCE_IMAGE.id_annonce(+)
    AND id_statut_image > 0
    GROUP BY AN.ID_ANNONCE
    Mon soucis c'est qu'il ne me rapatrie pas les id_annonces qui existent dans ANNONCE_IMAGE mais qui ont que des images au statut 0

    Merci pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 76
    Par défaut
    Bonjour,

    Essaie avec cette requete :

    SELECT AN.ID_ANNONCE, COUNT(*)
    FROM ANNONCE AN, ANNONCE_IMAGE
    WHERE AN.id_annonce = ANNONCE_IMAGE.id_annonce(+)
    AND id_statut_image(+) > 0
    GROUP BY AN.ID_ANNONCE

    Raphaël

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut
    Citation Envoyé par rapha51 Voir le message
    Bonjour,

    Essaie avec cette requete :

    SELECT AN.ID_ANNONCE, COUNT(*)
    FROM ANNONCE AN, ANNONCE_IMAGE
    WHERE AN.id_annonce = ANNONCE_IMAGE.id_annonce(+)
    AND id_statut_image(+) > 0
    GROUP BY AN.ID_ANNONCE

    Raphaël
    ça ne fonctionne pas mieux

    Oui j'ai bien compris mon problème sinon

    Mais hors mit un SUM avec un decode je vois pas autre chose de mieux

    Voici un exemple de données

    T_ANNONCE
    ------------
    id_annonce
    1234
    1235
    1236

    T_IMAGE
    ------------
    id_annonce STATUT id_image
    1234 1 1
    1234 0 2
    1235 1 1

    Comme résultat je cherche à avoir :
    ------------
    Id_annonce nombre_image
    1234 1
    1235 1
    1236 0

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    L'image de l'annonce 1235 n'existe pas dans T_annonce,
    T_IMAGE n'est pas une table fille de T_ANNONCE ?

    T'es sur ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut
    Citation Envoyé par McM Voir le message
    L'image de l'annonce 1235 n'existe pas dans T_annonce,
    T_IMAGE n'est pas une table fille de T_ANNONCE ?

    T'es sur ?
    Bien vu, je viens de corriger

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

    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
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par shadeoner Voir le message
    Bien vu, je viens de corriger
    Okay, donc pas besoin du FULL OUTER JOIN de laurent.

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    S'il n'y a pas toujours d'image, il faut effectivement une jointure externe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT an.id_annonce, SUM(DECODE( NVL(id_statut_image, 0), 0, 0, 1)) AS nb_dif_0
    FROM ANNONCE an, ANNONCE_IMAGE im
    WHERE an.id_annonce = im.id_annonce(+)
    GROUP BY an.id_annonce

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with T_ANNONCE as( 
    select 1234 id_annonce from dual union all 
    select 1236 from dual) ,
     T_IMAGE as (
    select 1234 id_annonce, 1 status, 1 id_image from dual union all
    select 1234,0,2 from dual union all
    select 1235,1,1 from dual )
    select id_annonce,count(id_image) 
    from t_annonce full outer join t_image using (id_annonce)
    where lnnvl(status=0)
    group by id_annonce
    order by id_annonce;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ID_ANNONCE COUNT(ID_IMAGE)
    ---------- ---------------
          1234               1
          1235               1
          1236               0



    PS: après la correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select a.id_annonce,count(id_image) 
    from t_annonce a , 
     t_image b 
    where a.id_annonce=b.id_annonce(+) and b.status (+)>0
    group by a.id_annonce
    order by a.id_annonce;

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par shadeoner Voir le message
    Je dois compter le nombre d'images dont le statut est > 0
    Mon soucis c'est qu'il ne me rapatrie pas les id_annonces qui existent dans ANNONCE_IMAGE mais qui ont que des images au statut 0
    ???
    tu veux les images dont le status>0 mais tu t'étonnes que les images au status=0 ne soient pas retournées???

    donne nous un exemple de données stpl !

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    On peut faire plus simple si il existe toujours une image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_annonce, SUM(DECODE(id_statut_image, 0,0, 1)) nb_sup_0
    FROM ANNONCE_IMAGE
    GROUP BY id_annonce

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 401
    Par défaut
    Citation Envoyé par McM Voir le message
    On peut faire plus simple si il existe toujours une image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_annonce, SUM(DECODE(id_statut_image, 0,0, 1)) nb_sup_0
    FROM ANNONCE_IMAGE
    GROUP BY id_annonce
    Justement il n'y a pas toujours une image

    cf. mon exemple

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

Discussions similaires

  1. Requête (casse tête)
    Par shadeoner dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/02/2008, 10h35
  2. Requête casse tête.. à vous de jouer.. :)
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/09/2007, 09h39
  3. requête casse-tête pour une seule table..
    Par MikeV dans le forum Requêtes
    Réponses: 9
    Dernier message: 23/08/2007, 21h02
  4. Requête (casse tête)
    Par shadeoner dans le forum SQL
    Réponses: 13
    Dernier message: 12/06/2007, 17h13
  5. Requête casse tête!
    Par sonorc dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2007, 02h03

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