J'ai deux tables. Une chaîne est/ID look simple up:Mise à jour SQL avec une jointure?
strTable:
str_key String 0 'a' 1 'b'
où les cordes sont uniques. L'autre est plus complexe, et comprend le string_id partagé
ValTable:
str_key other_key val 0 0 1.234 0 1 1.567 1 0 1.890
Maintenant, je veux faire une mise à jour sur ValTable, en utilisant une chaîne que je recherche pour obtenir le str_key via strTable. La simple mise à jour serait:
UPDATE ValTable SET val = 2.124 WHERE str_key = 0 AND other_key = 1 LIMIT 1
IF @@ROWCOUNT=0 INSERT INTO ValTable VALUES (0,1,2.124);
Alors, comment puis-je modifier cette recherche pour inclure le str_key avec une chaîne de caractères « a »? Je suppose que j'ai besoin d'une jointure, mais je n'ai jamais fait de jointure dans une mise à jour. Ou puis-je simplement ajouter plus à ma clause where?
Vous n'avez pas pour vos tables DDL, mais en supposant que str_key et other_key faire le PK pour votre ValTable, est-il une raison que vous avez le « LIMIT 1 »? Même si ce n'est pas le PK, il semble étrange d'utiliser LIMIT ici –
Je ne savais pas si cela entraînerait un balayage de la table entière sans la limite, mais je suppose que c'est assez intelligent pour savoir que la clé composée est * la touche * et n'affecte qu'une seule ligne. –