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 :

Mise à jour d'un champ dans ma base


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Mise à jour d'un champ dans ma base
    bonjour,

    j'ai une table centres qui contient entre autre un champs town et un champs town_id.
    town_id fait la jointure vers ma table Towns ou je récupère le nom de la ville.

    Ce que je souhaiterais faire c'est mettre à jour mon champs town de ma table Centres (qui contient lui aussi le nom de la ville avec l'orthographe des villes pas très exacte) en récupérant le nom des villes orthographié correctement dans ma table Town.

    c'est du basique mais je n'arrive pas faire.
    est ce que quelqu'un peut n'aider ?

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Alors plusieurs questions/remarques :

    - tu vas te faire taper sur les doigts car le modèle de données n'est pas censé accepter de redondances d'information... ton identifiant devrait être utilisé en double et non le nom de la ville...

    - si tu n'es pas à l'origine du modèle et que tu dois dealer avec les "merdes" des autres, bon courrage ^^

    - Quel est ton SGBD ?



    A priori, tu ne vas pas pouvoir faire de jointure directement... vue que les noms ne correspondent pas, et que tu n'as pas les ID, c'est juste impossible, il n'existe pas de clause "where ville RESSEMBLE A ville2" ... mais c'est à toi après de trouver des astuces. Par exemple, essaye de faire une jointure sur les deux trois premières lettres et/ou les deux trois dernières... ca peut te permettre de corriger certaines lignes, mais sans doute pas toute.
    Après, c'est un travail manuel d'update spécifique ligne à ligne...

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par bstevy Voir le message
    - tu vas te faire taper sur les doigts car le modèle de donné n'est pas censé accepté de redondance d'information... ton identifiant devrait être utilisé en double et non le nom de la ville...
    - si tu n'est pas à l'origine du modèle et que tu dois dealer avec les "merdes" des autres, bon courage ^^


    Citation Envoyé par bstevy Voir le message
    il n'existe pas de clause "where ville RESSEMBLE A ville2" ...
    certaines SGBD ont (ou peuvent intégrer) une fonction SoundLike

    mais
    - Quel est ton SGBD ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Quel que soit le SGBD, il n'est pas possible d'identifier une ville avec son seul nom, à cause des "doublons".
    Donc le code ne sera de toute façon pas déterministe, à moins d'avoir aussi le code postal.

    Sinon s'il faut se baser sur town_id pour retrouver le nom de la ville, la colonne town ne sert strictement à rien.
    Mais si tu es contraint de passer par là, je suggère 2 pistes:
    1. Un trigger sur la table Centres, qui va récupérer le nom de la ville à partir de l'Id et mettre à jour la colonne correspondante
    2. Renommer la table Centre, et la remplacer par une vue qui fait la jointure entre ces deux tables


    Tatayo.

  5. #5
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Rooo, y'as pas forcément de doublon. c'est peut etre les villes de la principauté de Monaco ^^

    Mais des doublons parfaits ne gènent pas la correction orthographique, au contraire.
    Après, si tu parles de "presque doublons" genre : Saint Maur et Saint Maurre ... une bétise dans le genre ; alors là, oui, effectivement, ca va être d'autant plus difficile.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Non, je parle de villes qui ont exactement le même nom, par exemple Fontanes qui existe dans le 30, le 34, le 42, le 48, le 46 (on dirai presque un tirage du loto ! )...

    Tatayo.

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci a tous pour vos réponses

    je pense que je dois eclaicir certain point

    1- oui il y a redondance. c'est une question de visualisation rapide et de confort personnel. c'est provisoire, à terme le champs town de la table Centre n'hésitera plus.

    2 town_id possède les id des villes correspondant à la ville dans la table Town.

    ce que je voudrais c'est simplement reporter le non de la Town.name dans Centre.name grace à l'id de la ville inscrite dans le champs Town.id

  8. #8
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Mais, tu as l'ID aussi dans Centre ? Parce qu'a priori, c'est pas ce qu'on a compris... (mais je prends peut etre mon cas pour une généralité)

    Dans ce cas, un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update A
    from CENTRE A
    INNER JOIN TOWN B on A.ID = B.ID
    set name = B.NAME
    ;
    Ou autre facon de l'écrire (ca depend de la base)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update CENTRE A
    set name = select B.NAME from TOWN B where A.ID = B.ID
    ;

    Ca devrait être un truc comme ca... à condition que t'ai l'ID des deux cotés.

  9. #9
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    oui il y a redondance. c'est une question de visualisation rapide et de confort personnel. c'est provisoire, à terme le champs town de la table Centre n'hésitera plus.
    Le problème fut posé le 14/05 à 23h23. S'il n'est toujours pas résolu 4 jours plus tard, sache que pour ton confort visuel, tu aurais pu, en 2 minutes, tout simplement faire une vue de jointure entre les deux tables, puisque, si j'ai bien compris, tu as les bons town_id dans la table centre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE VIEW v_villes_centres AS
    SELECT v.town_name AS nom_ville_centre -- + autres colonnes si nécessaire
    FROM centre c
    INNER JOIN town t ON t.town_id = c.town_id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Le problème fut posé le 14/05 à 23h23. S'il n'est toujours pas résolu 4 jours plus tard, sache que pour ton confort visuel, tu aurais pu, en 2 minutes, tout simplement faire une vue de jointure entre les deux tables, puisque, si j'ai bien compris, tu as les bons town_id dans la table centre.
    Pourquoi créer un objet pour cet usage "one-shot" une simple jointure suffit

  11. #11
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ce n'est peut-être pas one-shot, quoique temporaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Mise a jour d'un champ dans une base access
    Par FabriceAmex dans le forum IHM
    Réponses: 9
    Dernier message: 10/06/2010, 09h48
  2. Réponses: 4
    Dernier message: 30/05/2006, 20h44
  3. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 08h10
  4. mise à jour d'un champ dans un formulaire
    Par DiverSIG dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2006, 19h42
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

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