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 :

Erreur mais je ne vois pas où


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 38
    Points
    38
    Par défaut Erreur mais je ne vois pas où
    Bonjour,
    je travail sur OpenOffice Base.
    J'ai un message d'erreur lorsque je tente de créer une vue.

    "Column already exists in statement"

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create view "test" as
    SELECT DISTINCT "TLots Achats".*, "VUnités".*, "PoidsN_U" AS "Ton. Stock"
    FROM "TLots Achats", "VUnités"
    WHERE ( "TLots Achats"."Lot/Bordereau" = "VUnités"."Lot/Bordereau" )
    HAVING( ("VUnités"."EnStock_U"=1))
     
    UNION
     
    SELECT DISTINCT "TLots Achats".*, "VUnités".*, 0 AS "Ton. Stock"
    FROM "TLots Achats", "VUnités"
    WHERE ( "TLots Achats"."Lot/Bordereau" = "VUnités"."Lot/Bordereau" )
    HAVING( ("VUnités"."EnStock_U"=0))
    Lorsque j'execute séparément les 2parties de ma requête, pas de soucis, j'obtiens bien le résultat souhaité, c'est avec l'union qu'il y a un problème.

    Si quelqu'un voit de quoi ça vient, merci de m'aider.
    Je pense que ce n'est pas grand chose... mais suffisament pour que ça ne marche pas.
    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Oula je ne connais pas votre SGBD mais je crois que j'ai rarement vu une modélisation aussi mauvaise :
    - supprimez les espaces, les slashs dans les noms de colonnes, etc.
    - supprimez les guillemets
    - les parenthèses sont inutiles et rendent votre requête (encore) moins lisible

    Concernant votre message d'erreur, avez-vous une information sur la colonne concernée en erreur ?
    Un peu au hasard, essayez de supprimer l'alias qui figure dans la requête après le mot clé UNION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    SELECT DISTINCT "TLots Achats".*, "VUnités".*, 0 AS "Ton. Stock"
    Enfin, vous n'êtes pas obligée de passer par une requête UNION si votre SGBD supporte la structure CASE WHEN.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    Tout d'abord merci de me répondre.

    - pour les espaces et les slashs j'avoue que ce n'est pas super, mais je ne pense pas que le problème vienne de là.
    - les guillements sont indispensable avec mon SGBD (j'ai moi aussi été étonnée au début!)
    - concernant mon messages d'erreur, je n'ai pas de précisions supplémentaires.
    - mon SGBD ne supporte pas la structure CASE WHERE

    je vais tenter de supprimer l'alias et je reviendrai donner des nouvelles.

  4. #4
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    En SQL normalisé HAVING( ("VUnités"."EnStock_U"=0)) n'existe pas tandis que HAVING COUNT(*)=0 existe.

    COUNT peut être remplacé par n'importe quelle fonction d'agrégation (SUM, MAX, MIN, etc...)

    D'autre part dans la création de vue il faut éviter les select * surtout quand il y a plusieurs tables jointes. En effet il y a au moins 2 colonnes en double, celles de la jointure. Or chaque nom de colonne de la vue doit être unique.

    Donc il faut choisir une par une les colonnes non redondantes pour ne pas avoir "Column already exists in statement"

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 39
    Points : 38
    Points
    38
    Par défaut
    en prennant les colonnes une par une, ça marche en effet.
    Merci

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

Discussions similaires

  1. Bête erreur de syntaxe mais je ne vois pas
    Par ETVigan dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2010, 18h37
  2. erreur mais je ne vois pas où
    Par razily dans le forum Débuter
    Réponses: 8
    Dernier message: 11/03/2009, 10h57
  3. Erreur grossière mais je ne vois pas
    Par Oxygn44 dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2008, 10h36
  4. erreur de syntaxe, mais je ne vois pas
    Par Argorate dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/08/2006, 12h12
  5. Réponses: 7
    Dernier message: 30/10/2005, 12h54

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