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 :

rechercher un champ assez spécial


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut rechercher un champ assez spécial
    Bonsoir je m'explique
    je posséde une table (personnels) avec les colonnes : nom, prénom, ville
    la deuxiéme table (relevé) comporte les champs : identité (que regroupe nom et prénom de la table personnels) et une colonne accident

    et je souhaiterais afficher le nom des personnes pour qui accident est égal à 1 mais pour la ville de PARIS comment est ce possible ? car ma table relevé ne comprend pas de champ ville étant donné qu'il se trouve dans la table personnels.
    l'identité est le regroupement de nom et prénom.
    je pense que cela doit etre possible ! merci d'avance pour votre aide

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    C'est possible avec ton modèle de données, mais ça n'est pas le pied : il faut faire une jointure du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON personnel.nom || ' ' || personnel.prenom = relevé.identité
    mais c'est très moche, et nul au niveau performances.

    Tu devrais revoir ton modèle de données : ajouter à ta table personnel un champ id_personnel (autoincrémenté), et l'utiliser comme champ de jointure dans relevé :
    (personnel) : id_personnel, nom, prénom, ville
    (relevé) comporte les champs : id_personnel, accident

    D'une part ça te permet d'éviter les problèmes d'homonymes, d'autre part ta jointure devient simple et performante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOIN relevé ON relevé.id_personnel = personnel.id_personnel

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Quelques petites remarques pour commencer...
    1) Une table est composée de colonnes et de lignes. Le "champ" serait plutôt à considérer comme l'intersection entre une colonne et une ligne, c'est à dire une valeur particulière dans une colonne.
    2) Prendre le couple nom + prénom comme identifiant n'est pas optimum. Tu devrais ajouter une colonne identifiant de type entier non nul, non signé et auto incrémenté.
    3) L'identité dans la table relevé devrait être une clé étrangère faisant référence à l'identifiant de la personne dans la table personnels.
    4) La ville devrait être externalisée dans une troisième table et la table personnels devrait avoir l'identifiant de la ville en clé étrangère au lieu de son nom.

    Tu devrais donc avoir la structure suivante :
    ville (v_id, v_nom...)
    personne (p_id, nom, prenom, id_ville...)
    releve (r_id_personne, r_accident...)

    Je suppose qu'il y a d'autres choses dans la table releve qui justifient son existence parce qu'avec ce morceau de structure, accident pourrait être rappatrié dans la table personnel.

    Maintenant ton besoin...

    De quel format est la colonne 'releve.identite' ?
    a) 'NomPrenom'
    b) 'Nom Prenom'

    Je vais supposer ci-dessous que c'est le format a).
    Il faut faire une jointure entre les deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.nom, p.prenom
    FROM personnels AS p
    INNER JOIN releve As r ON p.nom || p.prenom = r.identite
    WHERE r.accident = 1
      AND ville = 'PARIS'

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    ok merci cinephil tes conseil mon bien avancé et mon permis de moeu comprendre ce type de requete mais je sui dans le cas b)
    dans ce cas je suppose que je dois faire ceci ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN releve AS r ON p.nom |. .| p.prenom = r.identite

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Pas tout à fait.
    La double barre verticale est l'opérateur standard de concaténation en SQL.
    Pour ajouter un espace, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN releve AS r ON p.nom || ' ' || p.prenom = r.identite

Discussions similaires

  1. recherche quel champ contient une valeur
    Par Pitou5464 dans le forum Access
    Réponses: 6
    Dernier message: 29/08/2006, 17h02
  2. PB recherche si champ deja present dans table
    Par stan314 dans le forum Access
    Réponses: 1
    Dernier message: 28/05/2006, 17h19
  3. [ODBC] Recherche du champ qui est Primary Key
    Par XtofRoland dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/02/2006, 11h43
  4. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  5. Recherche sur champ calculé
    Par srvremi dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/07/2004, 14h04

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