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 :

SQL - Recherches plusieurs critères dans plusieurs tables


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut SQL - Recherches plusieurs critères dans plusieurs tables
    Bonjour,

    1 base de données avec plusieurs tables : janvier, février, mars, avril, ...... septembre.
    Chacune de ces tables sont constituées des mêmes colonnes, dans le même ordre avec une colonne intitulée ANI qui contient des numéros de téléphones au format +33.

    Si je cherche les enregistrements pour le mois de janvier pour le numéro de téléphone +33123456789, je tape la requête suivante :

    select * from janvier where ANI = '+33123456789'

    Si je souhaite chercher aujourd'hui tous les appels du +33123456789 depuis le 1er janvier, je suis obligé de faire la requête table par table.

    Ma question : Est-il possible d'avoir une requête "unique" qui irait chercher dans l'ensemble des tables janvier à septembre ?
    Même chose si je recherche plusieurs numéros de téléphone ?

    Merci
    Jean-Michel

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Il s'agit clairement ici d'un problème de modélisation. A quoi bon 12 tables identiques ?
    Une seule table avec un plus le numéro de mois (voir la date ?), et le problème était réglé.

    Sinon ici la seule solution est de faire un UNION avec 12 fois la même requête, en changeant juste le nom de la table.

    Tatayo.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par jeanmichel0404 Voir le message
    Bonjour,

    1 base de données avec plusieurs tables : janvier, février, mars, avril, ...... septembre.
    Effectivement la modélisation est hautement stupide !
    Une règle d'Or en modélisation : un attribut ne dois jamais apparaître plus d'une fois dans le modèle (principe de non redondance)

    Citation Envoyé par jeanmichel0404 Voir le message
    Chacune de ces tables sont constituées des mêmes colonnes, dans le même ordre avec une colonne intitulée ANI qui contient des numéros de téléphones au format +33.

    Si je cherche les enregistrements pour le mois de janvier pour le numéro de téléphone +33123456789, je tape la requête suivante :

    select * from janvier where ANI = '+33123456789'

    Si je souhaite chercher aujourd'hui tous les appels du +33123456789 depuis le 1er janvier, je suis obligé de faire la requête table par table.

    Ma question : Est-il possible d'avoir une requête "unique" qui irait chercher dans l'ensemble des tables janvier à septembre ?
    Même chose si je recherche plusieurs numéros de téléphone ?

    Merci
    Jean-Michel
    Maintenant vous avez le choix de 3 solutions :
    1) écrire une vue de synthèse de vos 12 tables et faire une requête dessus
    2) écrire votre requête via du SQL dynamique
    3) faire un UNION ALL des vos 12 tables avec 12 fois le critère

    Dans tous les cas les performances seront lamentables…..

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut
    Mais c'est qu'on est bien reçu sur ce forum :-(
    Tout le monde n'a pas vos compétences sur le sujet SQL d'où le forum pour poser les questions mêmes si elles sont stupides et lamentables.
    Merci pour vos réponse.

    La solution avec UNION me conviendra.

    Bye

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par jeanmichel0404 Voir le message
    La solution avec UNION me conviendra.
    Jusqu'au jour au vous aurez suffisamment de données pour que cette requête deviennent d'une lenteur inacceptable pour les utilisateurs… Et là que ferez vous ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Effectivement la modélisation est hautement stupide !
    Une règle d'Or en modélisation : un attribut ne dois jamais apparaître plus d'une fois dans le modèle (principe de non redondance)



    Maintenant vous avez le choix de 3 solutions :
    1) écrire une vue de synthèse de vos 12 tables et faire une requête dessus
    2) écrire votre requête via du SQL dynamique
    3) faire un UNION ALL des vos 12 tables avec 12 fois le critère

    Dans tous les cas les performances seront lamentables…..

    A +
    4) Lire mon blog mono-article et remodéliser toute cette merde ni vu ni connu

    Et ça sera plus rapide, sans devoir tout réécrire l'existant

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2013
    Messages : 15
    Par défaut



    J'adore, je viens demander de l'aide parce que mon niveau SQL est à 0 et ça passe son temps à critiquer la base de données en place.
    ça donne envi de revenir tient

    Pour info, je ne peux rien modifier à la base de données en place.

    Donc, oui, je vais passer par la solution UNION même si, comme si indiqué plus haut, elle peut prendre un certain temps au bout d'un moment.
    Mais bon, vu que vous ne savez que critiquer et ne rien expliquer correctement ........

    Messieurs, redescendez un peu au niveau d'un utilisateur lambda au lieu de vous la pêter.

    Allez bye et pas sûr que je revienne malheureusement sur ce forum vu comment vous répondez aux demandes.

  8. #8
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jeanmichel0404 Voir le message
    J'adore, je viens demander de l'aide parce que mon niveau SQL est à 0 et ça passe son temps à critiquer la base de données en place.
    ça donne envi de revenir tient
    Tu as posé une question, à laquelle il me semble que tu as obtenu au moins une réponse.
    Libre à toi de revenir si as besoin de nouveaux éléments concernant cette réponse, ou d'autres problème.
    Citation Envoyé par jeanmichel0404 Voir le message
    Pour info, je ne peux rien modifier à la base de données en place.
    C'est bien dommage, mais c'est le lot de nombreux d'entre nous. Jouer les pompiers c'est bien, quand c'est au troisième sous-sol des enfers, ça donne un peu l'impression de perdre son temps.
    Citation Envoyé par jeanmichel0404 Voir le message
    Donc, oui, je vais passer par la solution UNION même si, comme si indiqué plus haut, elle peut prendre un certain temps au bout d'un moment.
    Donc effectivement, tu as eu ta réponse, je ne vois pas où es le problème.
    Citation Envoyé par jeanmichel0404 Voir le message
    Mais bon, vu que vous ne savez que critiquer et ne rien expliquer correctement ........

    Messieurs, redescendez un peu au niveau d'un utilisateur lambda au lieu de vous la pêter.

    Allez bye et pas sûr que je revienne malheureusement sur ce forum vu comment vous répondez aux demandes.
    Si tu as besoin de compléments d'explications, n'hésite pas à poser tes questions plutôt que de t'offusquer.
    Tu es visiblement débutant, et la base de données sur laquelle tu travailles a visiblement été mise en place par un débutant aussi (enfin, on espère) qui plus est dénué du moindre bon sens.
    90% si ce n'est 100% des problèmes que tu vas avoir avec cette base de données seront liés à sa modélisation complètement foireuse.
    Ça me semble la moindre des choses que de te prévenir que c'est ça ton problème et pas le fait que tu ne sâches pas faire un UNION.
    Quand il y a la sécheresse en Éthiopie, je suis pas sûr que les ONG distribuent des gobelets en plastique en disant que c'est plus pratique que de boire avec les mains...
    Ici c'est pareil, on préfère te prévenir que la solution que tu recherches ne va rien solutionner au final.

  9. #9
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par jeanmichel0404 Voir le message

    J'adore, je viens demander de l'aide parce que mon niveau SQL est à 0 et ça passe son temps à critiquer la base de données en place.
    ça donne envie de revenir tient
    ça donne envie de répondre...

    Citation Envoyé par jeanmichel0404 Voir le message
    Pour info, je ne peux rien modifier à la base de données en place.
    ça n'était pas précisé avant.

    Citation Envoyé par jeanmichel0404 Voir le message
    vu que vous ne savez que critiquer et ne rien expliquer correctement ........
    Ben si, justement, Tatayo, SQLPro, StringBuilder ont donné des pistes, notamment : as-tu lu le blog de StringBuilder ? ça parle de numéros de téléphone...

    Citation Envoyé par jeanmichel0404 Voir le message
    Tout le monde n'a pas vos compétences sur le sujet SQL d'où le forum pour poser les questions mêmes si elles sont stupides et lamentables.

    Messieurs, redescendez un peu au niveau d'un utilisateur lambda au lieu de vous la pêter.
    Personne n'a dit que les questions étaient stupides, juste que la modélisation initiale (quelqu'en soit l'auteur) n'était pas correctement réalisée, d'où le problème de requêtage.

    [EDIT] Grillé (et largement) par StringBuilder... suite à une discussion sur un point complètement différent au boulot.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/08/2019, 09h57
  2. [pl-sql] Recherche de doublons dans une table
    Par tommey dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 22h53
  3. Réponses: 7
    Dernier message: 26/10/2006, 15h13
  4. [SQL] Rechercher un mot dans ma table sql
    Par GrosB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/08/2006, 22h20
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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