UPDATE t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
SET t1.a = 'something',
t2.b = 42,
t3.c = t2.c
WHERE t1.a = 'blah';
यह देखने के लिए कि यह क्या अद्यतन करने जा रहा है, आप इसे चुनिंदा कथन में बदल सकते हैं, जैसे:
SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c
FROM t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
WHERE t1.a = 'blah';
दूसरे उत्तर के समान सारणी का उपयोग करने वाला एक उदाहरण:
SELECT Books.BookID, Orders.OrderID,
Orders.Quantity AS CurrentQuantity,
Orders.Quantity + 2 AS NewQuantity,
Books.InStock AS CurrentStock,
Books.InStock - 2 AS NewStock
FROM Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
WHERE Orders.OrderID = 1002;
UPDATE Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
SET Orders.Quantity = Orders.Quantity + 2,
Books.InStock = Books.InStock - 2
WHERE Orders.OrderID = 1002;
संपादित करें:
बस मनोरंजन के लिए, आइए कुछ और अधिक दिलचस्प जोड़ें।
मान लीजिए कि आपके पास books
और की एक तालिका है authors
। आपके books
पास एक है author_id
। लेकिन जब डेटाबेस को मूल रूप से बनाया गया था, तो कोई भी विदेशी कुंजी बाधाएं स्थापित नहीं की गई थीं और बाद में फ्रंट-एंड कोड में एक बग के कारण कुछ पुस्तकों को अमान्य author_id
s के साथ जोड़ा गया था । एक डीबीए के रूप में आपको इन सभी के माध्यम से जाने की आवश्यकता नहीं है कि books
क्या author_id
होना चाहिए, यह जांचने के लिए, इसलिए निर्णय किया जाता है कि डेटा कैप्चरर्स books
सही को इंगित करने के लिए तय करेंगे authors
। लेकिन हर एक के माध्यम से जाने के लिए बहुत सी किताबें हैं और चलिए आपको बताते हैं कि जिन लोगों के पास author_id
एक वास्तविक के साथ मेल खाती author
हैं वे सही हैं। यह सिर्फ वही है जो कोई नहीं हैauthor_id
s जो अमान्य हैं। उपयोगकर्ताओं के लिए पुस्तक विवरण को अपडेट करने के लिए पहले से ही एक इंटरफ़ेस है और डेवलपर्स केवल इस समस्या के लिए इसे बदलना नहीं चाहते हैं। लेकिन मौजूदा इंटरफ़ेस एक करता है INNER JOIN authors
, इसलिए अमान्य लेखकों वाली सभी पुस्तकों को बाहर रखा गया है।
आप यह क्या कर सकते हैं: "अज्ञात लेखक" की तरह एक नकली लेखक रिकॉर्ड डालें। फिर author_id
अज्ञात लेखक को इंगित करने के लिए सभी बुरे रिकॉर्ड्स को अपडेट करें । फिर डेटा कैप्चरर्स "अज्ञात लेखक" के लिए सेट किए गए लेखक के साथ सभी पुस्तकों की खोज कर सकते हैं, सही लेखक को देख सकते हैं और उन्हें ठीक कर सकते हैं।
अज्ञात लेखक को इंगित करने के लिए आप सभी बुरे रिकॉर्ड कैसे अपडेट करते हैं? इस तरह (अज्ञात लेखक का मान author_id
99999 है):
UPDATE books
LEFT OUTER JOIN authors ON books.author_id = authors.id
SET books.author_id = 99999
WHERE authors.id IS NULL;
इसके बाद के संस्करण भी अपडेट हो जाएगा books
कि एक है NULL
author_id
अज्ञात लेखक को। यदि आप ऐसा नहीं चाहते हैं, तो बेशक आप जोड़ सकते हैं AND books.author_id IS NOT NULL
।