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 :

dans une même table, recopier un champ


Sujet :

Langage SQL

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut dans une même table, recopier un champ
    Voilà la problématique, avec des champs différents de la réelle pour la simplifier.

    J'ai une table fratrie dans une base gens.

    Elle se remplit automatiquement en tapant dans d'autres bases sources.

    Me voici donc avec une table du genre

    ID4/Riri Dupont/Père : Albert Dupont/mère : Géraldine Dupont/adresse etc...
    puis j'ai un tuple

    ID5/Fifi Dupont dont tous les champs suivants sont vides et que j'aimerais remplir automatiquement en recopiant les mêmes infos que son frangin, en passant par l'id...

    Ca a l'air idiot je sais... Mais j'y arrive pas !!!

    On est sur la même table (et oui, je débute en mysql)... Je triture le truc depuis 4 H et rien n'y fait... Je sais récupérer les infos du premier frangin, mais pas les intégrer dans le update pour le second frangin... help please !

  2. #2
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    A première vue votre modèle de données est mauvais et risque de générer énormément de problèmes de redondance.

    Si on part du principe que nous avons des PERSONNES et que celles-ci ont, ou pas, chacune un PERE et une MERE, alors ces parents sont aussi des PERSONNES. Donc on peut voir là les relations suivantes :
    PERSONNE -- père de --> PERSONNE
    PERSONNE -- mère de --> PERSONNE

    Une fois ceci fait, vous réalisez une Vue qui permettra, par jointure, de récupérer automatiquement les parents d'une personne.

    Voici un exemple (script minimal, je zappe les déclarations de FK) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TABLE T_Personnes (
      PersonneId int primary key,
      Nom varchar(32) not null,
      Prenom varchar(32) not null,
      PereId int null,
      MereId int null)
     
    INSERT INTO T_Personnes VALUES (1,"DUPOND","Albert",null,null); 
    INSERT INTO T_Personnes VALUES (2,"DUPOND","Géraldine",null,null);
    INSERT INTO T_Personnes VALUES (3,"DUPOND","Riri",1,2);
    INSERT INTO T_Personnes VALUES (4,"DUPOND","Fifi",1,2);
     
    CREATE VIEW V_Personnes AS
      SELECT P.Nom, P.Prenom, Pere.Nom, Pere.Prenom, Mere.Nom, Mere.Prenom
      FROM T_Personnes P
      LEFT JOIN T_Personnes Pere ON P.PereId = Pere.PersonneId
      LEFT JOIN T_Personnes Mere ON P.MereId = Mere.PersonneId;
     
    SELECT * FROM V_Personnes
    Bien entendu ce que je vous propose doit être adapté à vos besoins et l'architecture de votre appli. De plus il y a peut-être de petites erreurs de syntaxe (je suis spécialisé SQL Serveur) mais le principe est là et peut être développé.

    Cordialement

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Je viens d'étudier la notion de sous-requête, ça paraissait coller impeccable sur le papier avec mon problème...

    Mais ça veut pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     UPDATE gens SET adresse = ( SELECT adresse from gens
    WHERE id = "4" )
    WHERE id = "5"

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Ah comme je suis gênée Christophe...

    Vous avez fourni un gros travail pour me répondre, et je vous en remercie, mais il se trouve que mes exemples n'avaient absolument rien à voir avec ça... Ca n'était que des exemples. Et pour ne pas rentrer dans les détails de mon entreprise, voilà, j'ai transposé...

    J'ai une base énorme, avec 25 tables qui tapent dans 5 bases sources, et qui me procurent des trous, et je souhaite boucher certains trous en utilisant d'autres tuples de la même table, je connais la condition de jointure... Le problème général est celui-ci...

    A moins que la clé que je cherche soit dans le LEFT JOIN de votre vue ? Je vais gratter ça...

Discussions similaires

  1. Champs identiques avec valeur différente where dans une même table
    Par Cyrus59 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/11/2014, 16h56
  2. Manipulation/copie de champs dans une même table
    Par djuzapto dans le forum Requêtes
    Réponses: 0
    Dernier message: 29/05/2013, 14h23
  3. Copier un enregistrement dans une même table
    Par slammer dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/05/2010, 23h17
  4. [Requête] plusieurs champs dans une même table ayants la même source
    Par Christophe93250 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2006, 16h18
  5. [SQL] Somme de 2 colonnes dans une même table
    Par Cyrilange dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/04/2005, 08h32

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