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 :

[Oracle] Update sur 1 colonne avec condition existence (SUBSTR)


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut [Oracle] Update sur 1 colonne avec condition existence (SUBSTR)
    Bonjour,


    Mon problème est le suivant : je souhaiterais modifier une colonne d'une table à partir de données d'une autre table
    j'ai 2 tables :

    une table APPLICATION avec ID_APPLICATION, NOM_APPLICATION
    une table TRANSACTION avec ID_TRANSACTION,NOM_TRANSACTION, ID_APPLICATION

    algorithme :

    si NOM_application est contenu dans la chaine de caractères Nom_transaction alors le champ ID_APPLICATION prend la valeur de l'id qui lui est associée dans la table APPLICATION.

    en SQL :

    UPDATE TRANSACTION
    IF TRANSACTION.NOM_TRANSACTON like '%APPLICATION.NOM_APPLICATION') THEN
    TRANSACTION.ID_TRANSACTION=APPLICATION.ID_APPLICATION

    <je ne vois pas bien comment intégrer cette idée a une requete>
    ex de table transaction & application:

    Actuellement :
    IDTRANSACTION | NOM_TRANSACTION | ID APPLICATION
    1 | blablabla-appli1|...
    2 | tarato-appli1|...
    3 | banana-appli2|...

    IDAPPLICATION|NOM_APPLICATION
    1 | appli1
    2 | appli2

    ce que j'essaie de faire

    IDTRANSACTION | NOM_TRANSACTION | ID APPLICATION
    1 | blablabla-appli1|1
    2 | tarato-appli1|1
    3 | banana-appli2|2

    IDAPPLICATION| NOM_APPLICATION
    1 | appli1
    2 | appli2


    merci bcp a ceux qui prendront le temps de se pencher sur le probleme, pour me donner des indications

    Charly

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ok

    Petite remarque, APPLICATION et TRANSACTION sont des mots reservés ORACLE, donc si tu utilises ces noms la pour des tables, tu risques d'avoir des petits ennuies.

    La requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE 
       transactions 
    SET
    idapplication =(SELECT
                           idapplication 
                          FROM
                            applications 
                          WHERE
                            instr(transactions.NOM_TRANSACTION, applications.NOM_APPLICATION)>0)
    
    Ps : J'ai mis un 's' au nom de tes tables

    Logiquement ca devrait marcher
    Bon courage

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Yanika_bzh : Dangereux ton update, tu mets à jour toute la table transactions, en mettant NULL pour les lignes non trouvées dans la requête intérieure.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Médiat
    Yanika_bzh : Dangereux ton update, tu mets à jour toute la table transactions, en mettant NULL pour les lignes non trouvées dans la requête intérieure.
    Ce qui reste coherent avec le postulat de depart non ??
    Je suppose que cette modification est faite pour gerer une "pseudo" regle d'integrité relationnelle. Donc dans ce cas, la regle d'integrité est respectée : elle n'existe pas, donc pas de valeur.

    Si je laisse une valeur (tout a fait possible par un decode par exemple), la reference n'a plus lieu d'etre :

    IDTRANSACTION | NOM_TRANSACTION | ID APPLICATION
    1 | blablabla-appli1|...
    2 | tarato-appli1|...
    3 | banana-appli2|...
    4 | tartenpion-appli3| 2

    Si je laisse la valeur 2 (car appli3 ne sera pas trouvé dans ma sous requete), je vais avoir une incoherence par rapport a l'algorithme de départ.

    Enfin, c'est ce que j'ai compris moi...

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Yanika_bzh
    Si je laisse la valeur 2 (car appli3 ne sera pas trouvé dans ma sous requete), je vais avoir une incoherence par rapport a l'algorithme de départ.
    Pas sur, si le ID_APPLICATION est renseigné, pourquoi le modifier ? Déjà que ce n'est pas propre de faire une jointure entre une chaîne de caractère et une sous chaîne, si en plus c'est une règle de gestion, je ne peux que préconiser de revoir la modélisation .
    J'ai compris pour ma part que cette update permettrait de corriger certains problèmes, non que c'était une règle absolue, mais suel le posteur initial peut donner une réponse....

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par Médiat
    Pas sur, si le ID_APPLICATION est renseigné, pourquoi le modifier ? Déjà que ce n'est pas propre de faire une jointure entre une chaîne de caractère et une sous chaîne, si en plus c'est une règle de gestion, je ne peux que préconiser de revoir la modélisation .
    J'ai compris pour ma part que cette update permettrait de corriger certains problèmes, non que c'était une règle absolue, mais suel le posteur initial peut donner une réponse....
    Je suis d'accord avec toi, les jointures entre sous chaines generalement montre la limite du modele conceptuel en place. Mais bon, dans la pratique il est souvent necessaire de s'adapter a l'existant (Je travaille dans le milieu industriel et je peux te dire que j'en ai vues des vertes et des pas mures )

    Comme tu le dis si bien, le posteur initial sera le maitre de ces lieux

  7. #7
    Membre du Club Avatar de magic charly
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 67
    Points
    67
    Par défaut
    Je crois qu'il doit il y avoir une sorte de transmission de pensée.. le code que j'ai écris avant de regarder a nouveau le topic était très similaire à celui de Yanika_bzh à la différence pres que j'utilisais substr pour le test de chaines de caractères.

    merci bcp à vous deux


    PS: je sais que les jointures à partir d'extractions de chaines de caractères c'est moche mais je n'ai pas la "liberté" d'action souhaitée (en terme de conception de DB)

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

Discussions similaires

  1. Sommes sur 2 colonnes avec conditions
    Par Trady dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/03/2014, 12h06
  2. Update sur une table avec conditions
    Par tibss dans le forum Langage SQL
    Réponses: 8
    Dernier message: 08/07/2011, 17h13
  3. UPDATE d'un tuple avec condition sur le meme champ
    Par zwan.bourg dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/09/2009, 12h32
  4. Faire un update sur colonnes avec condition
    Par calou_33 dans le forum SQL
    Réponses: 2
    Dernier message: 05/03/2009, 17h33
  5. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01

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