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 :

Requête complexe et error type : missing FROM-clause


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 14
    Par défaut Requête complexe et error type : missing FROM-clause
    Bonjour à vous,

    Dans l'édition d'un document IReport je rencontre de sérieux problèmes SQL.
    Même Google n'a pu me sauver et mon manque d'expérience en SQL devient cruel.

    J'ai construit une requête pour construire un état des jurys et après avoir rectifier pas mal d'erreur je bloque sur une erreur missing FROM-clause entry for table "classement".

    Je vous fais part de ma requête et suis désolé de sa longueur, de plus dans le premier select les données ne sont pas ordonnés car j'ai du pour avoir une bonne UNION ALL avoir le même nombre de champs et de même type.

    Le but est de simplement récupérer les champs voulus par la suite avec IReport, donc ce n'est pas si génant que ça.

    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    with cte_classements as (
        select srs.line_id, srs.student_id, nullif(srs.classement_final, 0) as classement_final
        from  auriga.t_scola_result_entetes sre
        join t_scola_result_students srs on (srs.calcul_id, srs.line_id) = (sre.calcul_id, sre.line_id)
        where sre.calcul_id = ($P{Parametres}::hstore->'calcul_id')::integer
    ),
    q1 as (
    -- (R.1)
    select 
      apprenant.objet_id as id_interne_aurion, 
      module.code AS "Période", 
      apprenant.ind_nom AS "Nom", 
      apprenant.ind_prenom AS "Prénom", 
      inscription_module.moyenne AS "Moyenne", 
      inscription_module.classement AS "Classement", 
      inscription_module.nombre_credits_potentiels AS "Crédits potentiels", 
      inscription_module.nombre_credits_obtenus AS "Crédits obtenus", 
      inscription_module.taux_credits_obtenus AS "Taux crédits obtenus/crédits potentiels",
      apprenant.ind_date_naissance AS "Date naissance.Apprenant"
    from (select o.* from auriga.t_individus o where true and o.est_apprenant) apprenant
    left join auriga.t_inscriptions_module inscription_module on inscription_module.apprenant_id = apprenant.objet_id
    left join auriga.t_modules module on module.objet_id = inscription_module.module_id
    where (true
    and (module.code = 'S7')
    )
    )
    , q2 as (
    -- BULATS (R.4)
    select 
      apprenant.objet_id as id_interne_aurion, 
      type_evenement.code AS "Code.Type d'événement", 
      D1.attribut_valfloat AS "SCORE.Attestation de niveau de langue"
    from (select o.* from auriga.t_individus o where true and o.est_apprenant and exists (select 1 from q1 where id_interne_aurion = o.objet_id)) apprenant
    left join auriga.t_apprenants_evenements R1 on R1.apprenant_id = apprenant.objet_id
    left join auriga.t_evenements evenement on evenement.objet_id = R1.evenement_id
    left join auriga.t_types_evenement type_evenement on type_evenement.objet_id = evenement.type_evenement_id
    left join auriga.t_relations R2 on R2.source_id = evenement.objet_id and R2.relation_nom = 'evenement-type_evenement_7'
    left join auriga.t_objets type_evenement_7 on type_evenement_7.objet_id = R2.dest_id and type_evenement_7.type = 'type_evenement_7' and not (type_evenement_7.efface or type_evenement_7.obsolete) 
    left join auriga.t_donnees D1 on (D1.objet_id, D1.attribut_id) = (type_evenement_7.objet_id, 246292)
    where (true
    and (type_evenement.code = 'ATTEST_NIV_LANGUE')
    )
    )
    , q3 as (
    -- bonif SP (R.3)
    select 
      apprenant.objet_id as id_interne_aurion, 
      cours.code AS "Cours Bonif SP", 
      inscription_cours.nombre_credits_obtenus AS "Crédits Bonif SP"
    from (select o.* from auriga.t_individus o where true and o.est_apprenant and exists (select 1 from q1 where id_interne_aurion = o.objet_id)) apprenant
    left join auriga.t_inscriptions_cours inscription_cours on inscription_cours.apprenant_id = apprenant.objet_id
    left join auriga.t_cours cours on cours.objet_id = inscription_cours.cours_id
    where (true
    and (cours.code = '12_SP_BONIF_E1')
    )
    )
    , q4 as (
    -- bonif SA (R.2)
    select 
      apprenant.objet_id as id_interne_aurion, 
      cours.code AS "Cours Bonif SA", 
      inscription_cours.nombre_credits_obtenus AS "Crédits bonif SA"
    from (select o.* from auriga.t_individus o where true and o.est_apprenant and exists (select 1 from q1 where id_interne_aurion = o.objet_id)) apprenant
    left join auriga.t_inscriptions_cours inscription_cours on inscription_cours.apprenant_id = apprenant.objet_id
    left join auriga.t_cours cours on cours.objet_id = inscription_cours.cours_id
    where (true
    and (cours.code = '12_SA_BONIF_E1')
    )
    )
    (
    select
    (array_agg(distinct id_interne_aurion))[1] as id_interne_aurion, 
      q1."Période", 
      q1."Nom",0, 
      q1."Prénom", 
      q4."Cours Bonif SA",
      q3."Cours Bonif SP",
      0,
      q2."Code.Type d'événement",
      '','',
      q1."Date naissance.Apprenant",
      q1."Classement",
      '','',
     
      0,0,0,0,'',0,'',0,
      q1."Moyenne",
      '','', 
     
      q1."Crédits potentiels", 
      q1."Crédits obtenus", 
      q1."Taux crédits obtenus/crédits potentiels", 
     
      q4."Crédits bonif SA", 
      0, 
      q3."Crédits Bonif SP",    
      (max(q2."SCORE.Attestation de niveau de langue")) as "Meilleur score au Bulats",0,0,0,
      q1."Date naissance.Apprenant",
      q1."Date naissance.Apprenant",
      q3."Crédits Bonif SP",0,q1."Date naissance.Apprenant",0,q1."Date naissance.Apprenant",
      q3."Crédits Bonif SP",q3."Crédits Bonif SP",'','',q3."Crédits Bonif SP",0,q3."Crédits Bonif SP",true,true,'',0,true,true,'',true,true,q3."Crédits Bonif SP",q3."Crédits Bonif SP",q3."Crédits Bonif SP",q3."Crédits Bonif SP",0,0,'',0
     
    from q1 full join q2 using (id_interne_aurion) full join q3 using (id_interne_aurion) full join q4 using (id_interne_aurion)
    where true  and id_interne_aurion= any(('{' || $P{ObjectID_List} || '}')::integer[]) 
    and q1.id_interne_aurion is not null
     
    group by q1."Période", q1."Nom", q1."Prénom", q1."Moyenne", q1."Classement", q1."Crédits potentiels", q1."Crédits obtenus", q1."Taux crédits obtenus/crédits potentiels", q4."Cours Bonif SA", q4."Crédits bonif SA", q3."Cours Bonif SP", q3."Crédits Bonif SP", q2."Code.Type d'événement",q1."Date naissance.Apprenant"
    order by q1."Classement" asc, q1."Moyenne" asc
    )
     
    union all
     
    select bulletin.*, classement.classement_final as classement_racine
    from bulletin(
        ('{' || $P{ApprenantIDs} || '}')::integer[],
        ($P{Parametres}::text ||
        ',"avec_arborescence"=>"no"
         ,"avec_epreuves"=>"yes"
         ,"avec_appreciations_groupe"=>"no"
         ,"avec_appreciations_modules"=>"no"
         ,"avec_appreciations_cours"=>"no"
         ,"avec_appreciations_notes"=>"no"
         ,"avec_traduction_lignes"=>"yes"')::hstore
     
             -- Activer cette ligne et renseigner "${langue_id}" si on veut forcer l'utilisation d'une langue ayant l'id "id_langue"
             -- || ('"langue_id"=>${langue_id}')::hstore
    ) bulletin
     
    -- classement
    left join cte_classements classement on classement.student_id = bulletin.apprenant_id
     
    order by classement.classement_final, apprenant_nom, bulletin.apprenant_prenom, bulletin.destinataire_id, bulletin.adresse_id, bulletin.ligne_ordre;

    J'espère sincèrement que quelqu'un pourra m'aider en attendant je retourne chercher comment rectifier cela.

    Merci à tous,
    Thomas.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Bon le forum n'est pas vraiment fait pour debugger la syntaxe d'une requête, mais en plus ça n'est même pas vraiment du SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FROM bulletin(
        ('{' || $P{ApprenantIDs} || '}')::integer[],
        ($P{Parametres}::text ||
        ',"avec_arborescence"=>"no"
         ,"avec_epreuves"=>"yes"
         ,"avec_appreciations_groupe"=>"no"
         ,"avec_appreciations_modules"=>"no"
         ,"avec_appreciations_cours"=>"no"
         ,"avec_appreciations_notes"=>"no"
         ,"avec_traduction_lignes"=>"yes"')::hstore
    Ce genre de code limite le nombre d'intervenant du forum ayant la compétence pour aider.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par sharingan_ Voir le message
    Bonjour à vous,

    Dans l'édition d'un document IReport je rencontre de sérieux problèmes SQL.
    Aux commentaires du collègue supra, j'ajouterais :

    - on a (enfin, j'ai) pas la moindre idée de ce qu'est un "IReport"
    - on ne sait pas quel SGBD vous utilisez
    - sans les DDL des tables, il va être difficile de trouver le problème (d'autant plus que vous utilisez des 'select *', qui sont, de base, à proscrire ou, du moins, ne doivent servir qu'à faire un test rapide dans l'outil client su SGBD).

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2011, 09h58
  2. Syntax error in FROM clause.
    Par Fjord dans le forum ASP.NET
    Réponses: 0
    Dernier message: 18/12/2008, 12h08
  3. [MySQL] syntaxe error dans une requête complexe
    Par info_sara dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/06/2008, 20h56
  4. Requêter 2 schémas sans préfixe dans la clause FROM
    Par buchette dans le forum Débuter
    Réponses: 4
    Dernier message: 18/04/2008, 16h50
  5. Réponses: 3
    Dernier message: 07/03/2008, 14h31

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