6
votes

MYSQL Mise à jour si l'enregistrement n'existe pas dans une autre table

J'essaie de déterminer s'il est possible de vérifier si un enregistrement spécifique existe dans le tableau B. Si oui, ne mettez pas à jour le tableau A.

J'ai essayé Googling, mais je ne trouve que la version insertion et je ne sais pas si c'est même possible avec une requête de mise à jour.

Merci d'avance


1 commentaires

Avez-vous compris cela? Ce serait utile pour moi!


3 Réponses :


12
votes
update table_to_update 
set some_column = 123
where id = 1
and id not in (select id from table_b)

3 commentaires

Je crains que ce ne soit pas ce qui est recherché. Cette requête mettra à jour tous les enregistrements du tableau A qui n'existent pas dans le tableau B. Mais John veut mettre à jour un enregistrement spécifique, de sorte que ID = quelque_value et ou une autre condition doit être ajouté à / code> clause.


@Riateche vous avez raison, même si ma question est un peu vague à ce sujet.


Je me demande s'il y a une solution avec un déclencheur ou une procédure stockée? Avant de mettre à jour / * code ici * /



2
votes

Vous pouvez également essayer avec mysql Existe expression. Utilisation de la syntaxe existante sur les versions MySQL plus anciennes I.E. 5.0 s'est révélée être plus rapide que d'utiliser la requête imbriquée.

update table_a
set some_column = 'bla'
where not exists (select id
                        from table_b
                        where table_a.id = table_b.id)


1 commentaires

Cette solution est très inefficace et nécessite une puissance de traitement beaucoup plus que Juergen D sa solution.



4
votes

Les instructions SQL suivantes fonctionnent comme une clé étrangère dans l'endroit où j'ajoute un nouveau champ dans la table de la fille avec la condition que cette valeur n'est pas dans une colonne de la table principale. xxx

Signification des paramètres et des tableaux:

  • T1: Table fille
  • T2: Table principale
  • 1st? : Valeur qui sera établie dans le domaine de T1.c1 si la condition est remplie
  • 2e? : Identifiant de l'enregistrement où le champ à mettre à jour est situé
  • 3ème? : Valeur nécessaire pour évaluer la condition, où je le comparque avec le champ de T2

    la valeur des premier et troisième paramètres doit être la même!

    Lorsque nous utilisons cette déclaration, lorsque nous nous référons au champ de la Table principale, la colonne doit avoir une clé primaire. C'est pourquoi la similitude avec la clé étrangère.


    La deuxième alternative serait également: xxx

    le premier et deuxième paramètres doivent être les mêmes . Où colonne est une colonne de la table principale.

    D'autre part, lorsque vous utilisez cette autre phrase, nous avons plus de flexibilité, car ce n'est pas une condition nécessaire que la colonne de la table principale a une clé primaire.


1 commentaires

S'il vous plaît écrivez votre réponse en anglais, puisque Overflow de pile est un site anglaise.