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

Requêtes MySQL Discussion :

Colonne contenue dans une autre


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 17
    Par défaut Colonne contenue dans une autre
    Bonsoir,
    je souhaiterai savoir comment faire pour savoir si une colonne est contenue dans une autre, je m'explique:

    Soit une table events(owner)
    et une table users(first_name,last_name)

    Comment savoir si first_name est contenu dans owner, à quelle requête cela correspond-il?

    Par exemple,vérifier que si on sache s'il est ou non dans le .

    Ainsi, s'assurer pour chaque first_name s'il est une partiz d'un owner et pour chaque last_name s'il est une partie d'un owner.

    Bonne soirée et merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Comment savoir si first_name est contenu dans owner, à quelle requête cela correspond-il?
    Il y a plusieurs manières de faire selon le résultat attendu.

    Si tu as les lignes suivantes :

    users (last_name, first_name)
    -----------
    Guilmette, Danielle
    Dumoulin, Étienne
    Josseaume, Coralie

    events (owner)
    -----------
    Coralie
    Apolline
    Étienne

    Pour avoir la présence/absence en toute lettre tu peux utiliser une jointure externe LEFT|RIGHT OUTER JOIN :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL
        u.last_name, u.first_name,
        CASE WHEN e.owner IS NULL THEN 'Absent de events' ELSE 'Présent dans events' END AS presence
    FROM users AS u
    LEFT OUTER JOIN evens AS e ON u.first_name = e.owner

    Donne :

    Guilmette, Danielle, Absent de events
    Dumoulin, Étienne, Présent dans events
    Josseaume, Coralie, Présent dans events

    Si tu veux simplement récupérer les lignes de users dont first_name est présent dans events.owner, alors avec une jointure interne INNER JOIN :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL u.last_name, u.first_name
    FROM users AS u
    INNER JOIN evens AS e ON u.first_name = e.owner

    Donne :

    Dumoulin, Étienne
    Josseaume, Coralie

    Bien sûr, dans la pratique on ne fait jamais de jointure sur des noms mais sur des identifiants numériques.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 730
    Billets dans le blog
    10
    Par défaut
    De ce que je comprends de la demande ci-dessous
    Citation Envoyé par salutagama Voir le message
    Ainsi, s'assurer pour chaque first_name s'il est une partie d'un owner et pour chaque last_name s'il est une partie d'un owner.
    Toute correspondance même partielle doit être identifiée, du coup une jointure sur la colonne nom ou prénom ne convient pas

    Voici une solution utilisable, mais attention, on est contraint de faire le produit cartésien des deux tables, ce qui peut être très lent si les tables sont fortement chargées

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with tab (prenom, nom, owner, tp, tn) as
        (select first_name
              , last_name
              , owner
              , case when locate(first_name, owner) > 0 then 1 else 0 end as trouve_prn
              , case when locate(last_name, owner)  > 0 then 1 else 0 end as trouve_nom
         from users
         cross join events
         order by first_name
                , last_name
        )
    select *
    from tab
    where tp+tn > 0

  4. #4
    Membre Expert
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 946
    Par défaut
    Bonjour

    N'aurait-il pas été plus pertinent d'avoir un identifiant numérique en clé primaire dans la table users et la référence à cette clé primaire dans la table owners?

    Pierre

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2021, 16h17
  2. Réponses: 8
    Dernier message: 25/10/2018, 12h53
  3. [POO] Retourner une variables contenu dans une autre méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 6
    Dernier message: 15/10/2007, 17h29
  4. Réponses: 2
    Dernier message: 06/10/2007, 00h49
  5. Réponses: 3
    Dernier message: 13/06/2006, 17h36

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