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 :

sous-requete


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut sous-requete
    Bonjour a tous. Qqn pourrait m indiquer pourquoi ma requete simple ne fonctionne pas :

    select sin(select o.ort_breitengrad from ort o where o.ort_name like 'Absam');

    je suis sous postgre sql et voila la reponse que je recois :

    ERROR: syntax error at or near "select" at character 12

    Merci d avance de votre aide.

    Raphael

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonsoir,

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sin(o.ort_breitengrad) from ort o where o.ort_name like 'Absam';
    est syntaxiquement correct, mais si ce n'est pas aussi basique il faudrait que tu expliques ce que tu veux faire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    en fait je souhaite obtenir le sinux (avec la fonction sin) de la valeur se trouvant dans la colonne ort.breitengrad. Je fais pour ce faire une sous-requete qui me retourne cette valeur pour la ligne dont le ort_name est egal a 'Absam'.
    Le plus etrange est que ma sous-requete fonctionne tres bien seule et que la fonction sinus fonctionne aussi si je lui passe une valeur en dur. Mais quand je rassemble les deux il me retourne cette erreur :

    ERROR: syntax error at or near "select" at character 12

    revoici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sin(select o.ort_breitengrad from ort o where o.ort_name like 'Absam');

  4. #4
    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
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sin(O.ORT_BREITENGRAD)
    FROM ORT AS O
    WHERE O.ORT_NAMEL LIKE 'Absam';
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci, ca fonctionne. Tu peux pas savoir de quel petrin tu m as sorti !!

    Mais peux-tu me dire ce qui etait incorrect dans ma requete ? Parce qu en fait il ne s agit que d une petite partie de ma requete finale qui va etre beaucoup plus longue...

    Merci beaucoup

    Raphael E.

  6. #6
    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
    Comment expliquer clairement...
    Je vais essayer de ne pas dire d'énormités.

    En gros, tu te compliques la vie.
    Pour moi, la syntaxe minimal d'une requête SQL de sélection est de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT <colonne(s)>
    FROM <table(s)>
    Donc, dans ton cas ce qui t'intéresse c'est d'extraire la colonne ORT_BREITENGRAD de la table ORT donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT O.ORT_BREITENGRAD
    FROM ORT AS O
    Mais, ce n'est pas la valeur de la colonne ORT_BREITENGRAD que tu désires récupérer mais le résultat de la fonction sinus appliquée à cette colonne dont tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sin(O.ORT_BREITENGRAD) 
    FROM ORT AS O 
    WHERE O.ORT_NAMEL LIKE 'Absam';
    Tu ajoutes enfin ton filtre avec la clause WHERE tel que l'avais fait.

    Si c'est pas clair, n'hésites pas à demander des infos complémentaires.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    En fait je dois effectuer la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=ARCCOS( SIN(Breite von Source)*SIN(Breite von Destination) + COS(Breite von Source)*COS(Breite von Destination)*COS(Länge von Source-Länge von Destination))*6378,388"
    Donc il faudra en fait que je fasse plusieurs sous-requete qui me donneront en fin de compte un select tres long et difficilement lisible.

    Quelle solution serait la meilleure ? Je pensais stocker les valeurs de sinus et de cosinus que j utilise a plusieurs reprise dans ma requete.

    Qu en penses-tu ?

    J espere que j ai ete suffisament clair.

  8. #8
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: sous-requete
    Citation Envoyé par raph_egg
    select sin(select o.ort_breitengrad from ort o where o.ort_name like 'Absam');
    Ce qui est incorrect dans ta première requête, c'est le placement des parenthèse. Ta sous-requête est OK, mais dans ta requête principale, tu fais un SELECT sans FROM !

    Sous Oracle, pour obtenir la valeur d'un sinus sur une valeur, il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SIN(45) FROM DUAL;
    Je ne sais pas quelle est la syntaxe en PostGre, mais tu as certainement un équivalent : il manquait cet équivalent (FROM Dual) dans ta première requête
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  9. #9
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Bonjour,

    Sous Pg; il n'y a pas besoin de la "table" DUAL pour executer une fonction à vide :

    Pour forcer une sous requete dans le bloc SELECT il faut la mettre entre parentheses meme si en plus on l'integre dans une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select sin(select o.ort_breitengrad from ort o where o.ort_name like 'Absam');
    devrient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select sin( (select o.ort_breitengrad from ort o where o.ort_name like 'Absam') );
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

  10. #10
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    Si ca t'interrese j'avais ecrit une petite procedure pour le calcul orthodromique :
    http://postgresql.developpez.com/sou...istancelonglat
    Delphi 2009 - ZeosLib - DevExpress - TMS - PgDAC
    PostgreSQL 8.4 sous Debian
    Sites : http://postgresql.developpez.com http://dgriessinger.developpez.com

Discussions similaires

  1. [MySQL 4] Sous Requete IN .. SELECT ...
    Par pataluc dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/09/2004, 15h54
  2. Problème sous requete MySQL
    Par gavelin dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/07/2004, 10h36
  3. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02
  4. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18
  5. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54

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