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 :

Résultat d'un champ pour décrire un autre champ


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 11
    Points
    11
    Par défaut Résultat d'un champ pour décrire un autre champ
    Bonjour,

    Est-il possible d'utiliser le résultat d'un champ pour décrire un autre champ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT f.nom, f.champ, j.nom 
    FROM table_f f
    JOIN table_j j ON ??? < 10
    Dans cet exemple, j'aimerais que "???" soit remplacé par le contenu de f.champ

    Quelqu'un connait la solution ?

    D'avance merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Si tu nous donnais un petit exemple (quelques lignes de données, le résultat attendu), ce serait plus simple pour comprendre ce que tu veux faire parce que là... ce n'est pas clair du tout.
    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.

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    tu n'as pas essayé tout simplement :

    D'après ce tuto c'est possible mais je suis pas sûre que ce soit la syntaxe exacte. La condition <10 devrait être plutôt dans le where.
    ~ Lola ~

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    tu n'as pas essayé tout simplement : ON f.champ < 10
    Non ce n'est pas la valeur de f.champ que je veux comparer mais la valeur de j.??? ou ??? correspond au contenu de f.champ.

    Si je devais le décomposer en plusieurs requêtes ça donnerai cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $result_fs = db_query('SELECT nom, champ FROM table_f;')->fetchAll();
     
    foreach ($result_fs as $__f) 
    {
    	$result_js = db_query('SELECT nom FROM table_j WHERE '.$__f->champ.'<10;')->fetchAll();
     
    	// traitement
    }
    Je ne souhaite pas m'en sortir en créant une 3ème table de relation entre les table_j et table_f.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Avec tes colonnes qui portent toutes le même nom, c'est bien difficile d'y comprendre quelque chose.
    Une jeu d'essai de quelques lignes ?
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Merci de passer du temps, j'essaye vraiment de simplifier mes requêtes pour quelle soient le plus lisible possible.

    La requête que je souhaite écrire est celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM f
    JOIN j ON j.[Nom contenu dans la variable f.champ] < 10
    Je pourrai l’écrire comme ci dessous, ça fonctionne très bien, sauf que dans la réalité je ne connais pas les noms des champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM f
    JOIN j ON
    	CASE 
    		WHEN f.champ = 'c_1' THEN j.c_1 < 10
    		WHEN f.champ = 'c_2' THEN j.c_2 < 10
    		WHEN f.champ = 'c_3' THEN j.c_3 < 10
    		ELSE 0
    	END
    Il n'y a peut être pas de solution, sauf à créer une troisième table de liaison...

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Il n'y a peut être pas de solution, sauf à créer une troisième table de liaison.
    En voila une bonne idée !

    Faut pas avoir peur de créer des tables, c'est ayant une bonne modélisation que vos requêtes seront facile à construire, et performante.

  8. #8
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM f
    JOIN j ON j.[Nom contenu dans la variable f.champ] < 10
    De ce que je comprend tu veux utiliser la valeur contenue dans un champs pour l'insérer dans une clause de sélection, ça ressemble donc à du SQL Dynamique

    Par exemple tu as une table Data qui contient deux colonnes : Table_SQL et Colonne_SQL.
    Ce que tu aimerais, c'est récupérer la valeur de Colonne_SQL pour une valeur de Table_SQL donnée et utiliser cette valeur pour l'insérer dans une requête.

    PS : Tout dépend aussi du SGBD utilisé, le lien correspondant à Oracle

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    La réponse de Phili2pe est la bonne : tu dois énumérer tous les champs de ta table dans un case.

    Cependant, ça me semble relativement très crade.

    Peux-tu expliquer un peu mieux ton modèle, afin qu'on puisse te donner des pistes pour l'améliorer ?
    On ne jouit bien que de ce qu’on partage.

Discussions similaires

  1. [XL-2010] Macro pour colorer des champs qui dépendent d'autres champs
    Par Mystic_wolf dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/12/2012, 12h33
  2. Réponses: 1
    Dernier message: 04/07/2011, 21h35
  3. condition sur un champ pour détenir un autre
    Par amine003 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/12/2008, 21h33
  4. Réponses: 3
    Dernier message: 17/01/2007, 09h33
  5. Réponses: 1
    Dernier message: 10/01/2006, 10h59

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