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

Développement SQL Server Discussion :

Requête select SQL


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut Requête select SQL
    Bonjour,

    À partir d'une info1, chercher dans table2 la colonne à rechercher dans la table 1.
    À partir d'une info2, chercher dans la table1 les enregistrements dont la colonne trouvée ci-dessus a la valeur d'info2.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
      from TABLE1 
     where (select t2.CHAMP2 from TABLE2 where t2.CHAMP1 = 'titi') = 'toto'
    Avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    table1
    t1.colonne1   t1.colonne2    t1.colonne3
         12345          toto           tata
           789           xxx           toto
     
    table2
    t2.champ1          t2.champ2
        titi         t1.colonne2
        tete         t1.colonne3

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    votre exemple n'est pas très concret (toto, titi, table1 champ1,...)
    mais je pense que vous avez un gros problème de modélisation dans votre base de données.

    Que représentent ces informations, et pourquoi voulez vous faire cela ?

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    en fait la requête qui m'intéresse c'est celle-là !
    un select dynamique dont je n aurais que le nom de la table et la valeur de la clé
    (le nom de champ de la clé n'étant pour chacune des tables concernées pas le même )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * from " + NOMTABLE + "   
    where
    (
    select top 1 syscolumns.name from sysobjects , syscolumns 
    where( sysobjects.id = syscolumns.id) and (sysobjects.xtype = 'U') and sysobjects.name like NOMTABLE  order by syscolumns.colorder
    )  = '" INFO2 "'"

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    J'avais compris le principe, mais je vous demande pourquoi vous voulez faire ceci pour deux raisons :

    1/ comme je le disais, votre base me semble très mal conçue. Je ne sais pas a quel stade vous en êtes au niveau du développement, et si vous avez la possibilité de faire ce qui s'impose sur le dit serveur de base de données, mais si c'est le cas, je vous invite a reconsidérer les choses et à revoir votre modèle.

    2/ vos tables vont-elles être amenées à évoluer, ou est-ce que les colonnes sur lesquelles doivent s'appliquer les filtre sont déjà définies de façon exhaustive

    C'est pour ca aussi que savoir de quoi on parle un peu plus précisément peu aider a vous orienter vers une solution plus adéquate.

  5. #5
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    Un gros problème de modélisation je pense aussi mais bon ce n'ai pas moi qui m'occupe de ça je n'ai donc pas la possibilité de le refaire correctement mais j'aurai aimé ne serais-ce que voir le modèle correct !!

    Les tables seront certainement amenées à évoluer puisqu'ici tout se fait au fur et à mesure !

    Pour mon cas je lis un .csv et pour chacune de ces ligne je verifier si il y a des enregistrement dans la table (le non de la table je le sais car c le nom du csv)
    et la cle est le premier element de la ligne du csv

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Ce que vous voulez faire n'est pas possible tel que vous voulez le faire.

    Vous avez deux possibilités
    1/ la plus propre (ou plutot la moins sale) consiste à effectuer une jointure dépendant du contenu de votre colonne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT *
    FROM Table1 t1
    INNER JOIN Table2 t2 
      ON t2.champ1 = 'titi' 
      AND 'toto' = CASE 
        WHEN t2.champ2 = 't1.colonne2' THEN t1.colonne2 
        WHEN  t2.champ2 = 't1.colonne3' THEN t1.colonne3
      END

    Le problème, c'est que vous devrez modifier cette requete a chaque ajout de colonne dans la table1, ce qui risque d'arriver régulièrement vu comme c'est parti. D'un autre coté, quand on est prêt a changer son modèle de données régulièrement, il faut être prêt a changer ses requêtes aussi régulièrement !

    2/ l'alternative consiste a créer votre requete dynamiquement a l'aide d'une autre requete, puis a l'exécuter. Mais cette solution a aussi son lot de risques et de complications (privilèges nécessaires, injections SQL, contexte d'exécution différent, ...).
    Celle solution peut toutefois faire l'affaire si par exemple vous effectuez l'opération depuis un programme externe :
    1/ requete pour récupérer la colonne sur laquelle filtrer
    2/ un autre requete (générée dans votre programme à partir du résultat de la première) avec le bon filtre

  7. #7
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    ok tant pis

    je ferais ma requete en 2 fois

    merci

Discussions similaires

  1. [SQL] Problème avec ma requête SELECT
    Par oranocha dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/10/2007, 16h11
  2. [SQL 2005] Problème pour une requête SELECT
    Par Rodie dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/06/2007, 17h12
  3. Réponses: 2
    Dernier message: 14/05/2007, 16h18
  4. [SQL] Problème requête SELECT
    Par dolf13 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 04/07/2006, 23h54
  5. SQL Server 7.0 - Requête Select
    Par sangokus dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/03/2004, 10h32

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