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 sur deux tables avec fonction COUNT


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut Requête sur deux tables avec fonction COUNT
    Bonjour,

    Je suis débutant en requête Sql et Je cherche à connaitre tous les dossiers qui ne possède pas d'actes.

    Je possède deux tables.

    1ere Table : Hos

    [Num_Dossier] [Date]
    
    0001.......01/01/2013
    0002.......01/01/2013
    0003.......01/02/2013
    2eme Table : Acc

    [Num_Dossier] [Date] [UtiCrea] [Code]
    
    0001......01/01/2013.....User1......C
    0002......01/01/2013.....User1......C
    Donc je souhaiterais avoir comme résultat le dossier 0003

    Comment dois je m'y prendre.

    Merci d'Avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 519
    Par défaut
    Bonjour,
    Je ne vois pas trop le rapport avec Count()...
    Il faut sois passer par une sous-requête avec NOT IN, NOT EXISTS, soit par une jointure externe.

    Tatayo

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut
    c'est à dire?

    Je suis débutant et je connais parfaitement le select * from where une condition mais au dela, je rame un peu.

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 140
    Par défaut
    Peut-être qu'un peu de lecture t'aidera à mieux comprendre...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Je vous invite à lire les tutoriels de la rubrique SQL :
    http://sql.developpez.com/

    Pour les sous-requêtes c'est ici :
    http://sqlpro.developpez.com/cours/sqlaz/sousrequetes/

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut
    Bonsoir,

    Je pense avoir trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_HOS.Num_Dossier, T_ACC.Num_Dossier
    FROM T_HOS
    LEFT JOIN T_ACC ON T_HOS.Num_Dossier = T_ACC.Num_Dossier
    WHERE T_ACC.Num_Dossier IS NULL
    Je cherche maintenant à mettre comme condition, les dossiers créer le par exemple 01/08/2013

    Pour cela j'utilise :
    WHERE Date > '01082013'
    AND DATE < '02082013'

    Je ne sais ou mettre cette condition dans ma requete.

    Encore merci

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 519
    Par défaut
    Bonjour,
    Ca dépend de la table concernée (les deux ont une colonne date):
    si c'est la table T_HOS, le filtre va dans la clause where
    si c'est la table T_ACC, le filtre va dans la jointure. Sinon celle-ci va de facto se "transformer" en jointure interne.

    Mais il suffisait de faire le test, et de comparer les deux résultats.

    Tatayo.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut
    Merci pour vos réponses.

    J'ai essayer avec phpmyadmin et ma base exemple.

    Cela marche.

    Lorsque je veux le faire à mon travail, cela ne marche pas.

    Je travaille avec sqldevelopper.

    J'ai essayer de retranscrire ma requete ce qui donne ceci mais cela ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT HOS.NUHOHO, ACC.NUHOAC
    FROM HOS
    WHERE HOS.NUHOHO(+) = ACC.NUHOAC
    Merci

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Lorsque je veux le faire à mon travail, cela ne marche pas.
    Ca ne marche pas, n'est pas un message d'erreur.
    Vous pouvez utiliser la syntaxe ANSI "LEFT JOIN" sur oracle (si vous êtes au moins en version 9i ce qui paraît probable)

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 140
    Par défaut
    C'est normal que ta requête ne fonctionne pas avec MySQL ; l'opérateur (+) = appartient à Oracle, pas au langage SQL.
    A moins que tu ne sois contraint de travailler sur des versions d'Oracle antérieures à la 9, tu as tout intérêt à supprimer cet opérateur de ta mémoire.
    Tu ne trouveras que des avantages à utiliser la syntaxe normalisée (LEFT|RIGHT) [OUTER] JOIN pour tes jointures externes.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut
    Merci.

    J'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT HOS.NUHOHO, trunc(DATEHO, 'DD') AS jour_dossier
    FROM HOS
    LEFT OUTER JOIN ACC
    ON HOS.NUHOHO = ACC.NUHOAC
    WHERE HOS.DATEHO > '06082013'
    AND HOS.DATEHO < '07082013'
    GROUP BY HOS.NUHOHO, HOS.DATEHO
    Mais il me manque la notion de trunc pour le champ daexac car il est sous la forme JJMMAAAA HH:SS.

    Ou dois je mettre ma condition pour comparer la date jour_dossier avec jour_acte car l'heure de la création du dossier est différente de l'heure des actes.

    Merci

  12. #12
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 519
    Par défaut
    Citation Envoyé par islande Voir le message
    Merci.

    J'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT HOS.NUHOHO, trunc(DATEHO, 'DD') AS jour_dossier
    FROM HOS
    LEFT OUTER JOIN ACC
    ON HOS.NUHOHO = ACC.NUHOAC
    WHERE HOS.DATEHO > '06082013'
    AND HOS.DATEHO < '07082013'
    GROUP BY HOS.NUHOHO, HOS.DATEHO
    Mais il me manque la notion de trunc pour le champ daexac car il est sous la forme JJMMAAAA HH:SS.

    Ou dois je mettre ma condition pour comparer la date jour_dossier avec jour_acte car l'heure de la création du dossier est différente de l'heure des actes.

    Merci

    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Ca dépend de la table concernée (les deux ont une colonne date):
    si c'est la table T_HOS, le filtre va dans la clause where
    si c'est la table T_ACC, le filtre va dans la jointure. Sinon celle-ci va de facto se "transformer" en jointure interne.

    Mais il suffisait de faire le test, et de comparer les deux résultats.

    Tatayo.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Une date n'a pas de format, c'est un type de donnée, l'affichage dépend du paramétrage de la session.
    Il faut donc utilser TO_DATE sur la chaîne passée en paramètre pour éviter les conversions implicites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE HOS.DATEHO > to_date('06082013','ddmmyyyy')
      AND HOS.DATEHO < to_date('07082013','ddmmyyyy')
    TRUNC(LA_DATE) place les heures:min:sec à 00:00:00

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 284
    Par défaut
    Encore merci pour tout.

    J'ai trouvé enfin, je me suis un peu embrouillé avec les requetes sous oracle et mysql.

    Merci

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

Discussions similaires

  1. Requête sur deux tables avec incrément de champ
    Par LB dans le forum Langage SQL
    Réponses: 12
    Dernier message: 15/11/2014, 18h41
  2. Requête sur trois tables avec deux sommes
    Par gpz1963 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/09/2013, 18h38
  3. sql requête sur deux tables avec cumul..
    Par Chris'S dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/01/2010, 00h23
  4. [Access] Fonction TOP dans une requête sur deux tables
    Par pc75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/07/2007, 10h31
  5. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 10h06

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