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 :

Erreur : ora 01427


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Par défaut Erreur : ora 01427
    Bonsoir,

    J’ai deux tables=>
    tab1 (id1, voiture, matricule1, date1, codePersonne)
    Tab2 (id2, nom2, prenom2, matricule2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM tab1 t1, tab2 t2
    WHERE t1. codePersonne = t2.id2
    Cette requête me donne plusieurs lignes sur même personne mais moi je veux que la ligne de la date plus récente pour chaque personne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM tab1 t1, tab2 t2
    WHERE t1.codePersonne = t2.id2
    And t1.date1= (select max (date1) from tab1)
    Mais cette requête donne le max de ts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM tab1 t1, tab2 t2
    WHERE t1.codePersonne = t2.id2
    And t1.codePersonne = (select codePersonne from tab1 where date1= (select (max (date1) from tab1)
    Mais cette requête me donne une erreur d oracle : ora 01427 (car j ai plusieurs lignes)

    Est-ce que je dois faire un group by ou faire 2 requêtes dans ce cas ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With new_tab1 as
    (
    select t1.*,
           row_number() over(partition by t1.codePersonne order by t1.date1 desc) as rn
      from tab1 t1
    )
    SELECT *
      FROM new_tab1 t1
           inner join tab2 t2
             ON t2.id2 = t1.codePersonne
     WHERE t1.rn = 1;

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Par défaut
    Merci, mais est ce qu'il y a une autre solution sans créer une autre table

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    La solution indiquée ne crée pas de table, c'est juste un select.

  5. #5
    Membre éclairé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

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

    Informations forums :
    Inscription : Février 2007
    Messages : 346
    Par défaut
    Merci pour la réponse mais peux m expliquer cette logique car ce que j ai compris ici on tu prends tous les éléments de la table t1 on prend que la ligne de la date récente et après tu fais un jointure ma question pourquoi tu fais a quoi sert ça et aussi pourquoi on utilise i au lieu d une normale jointure ??

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est la jointure normale selon la norme ANSI.
    Perdez l'habitude d'utiliser la virgule.

    Pour le over(...), c'est ce qu'on appelle une fonction de fenêtrage.
    Vous pouvez lire cet article de SQLPro :
    http://sqlpro.developpez.com/article...clause-window/

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2015, 15h01
  2. [O7] Update (simple) mais erreur ORA-01427
    Par akr54 dans le forum SQL
    Réponses: 5
    Dernier message: 23/02/2011, 19h34
  3. Erreur ORA-01427 single-row subquery returns more than one row
    Par SmileAndFly dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/08/2008, 15h12
  4. Réponses: 6
    Dernier message: 29/11/2005, 19h36
  5. erreur "ORA-22905" lors de l'execution d'un requet
    Par benji999 dans le forum Administration
    Réponses: 26
    Dernier message: 14/04/2004, 11h47

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