2010-01-28 17 views
7

शाम सभी,तालिका तालिका से तालिका अपडेट करें जहां (शर्तें)

असल में, यह रात है। लगभग 11 बजे। मेरा दिमाग बंद हो रहा है और मुझे थोड़ी मदद चाहिए ताकि मैं खत्म कर सकूं और घर जा सकूं :)

मेरे पास दो टेबल हैं - टेबल ए और टेबल बी। मुझे दो अन्य फ़ील्ड मैच होने पर तालिका बी में किसी फ़ील्ड से मान के साथ तालिका में फ़ील्ड को अपडेट करने की आवश्यकता है। टेबल प्रत्येक रिकॉर्ड :(

मूल रूप से, मैं ऐसा करना चाहते हैं के लिए एक विशिष्ट आईडी होनी नहीं है:

update a 
set importantField = 
(select b.importantfield 
from b 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 
) 
where a.matchfield = b.matchfield 
and a.matchfield2 = b.matchfield2 

या कम से कम ... मुझे लगता है कि मुझे क्या करना चाहते है ...

किसी ने मुझे बाहर करने में मदद कर सकते हैं, कृपया

उत्तर

11

आप एक अद्यतन में शामिल होने के माध्यम से ऐसा कर सकते हैं:?

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

आप, सर, एक प्रतिभाशाली हैं। ... और मैं वास्तव में थक गया हूं कि शामिल होने के बारे में सोचने के लिए ... अब मैं घर जा सकता हूं और यह सब आपको धन्यवाद! अपने आप को पीठ पर एक पेट दें: डी –

+0

@ कॉस्मिक: खुशी है कि यह आपके लिए काम करता है ... मुझे इस काम को दोबारा जांचना पड़ा, हाल ही में LINQ के अंदर बहुत अधिक समय बिताया :) –

+0

मुझे लगता है कि आपको 'ए' के ​​लिए उपनाम सेट करने की आवश्यकता है 'काम करने के लिए टेबल, या मैं कुछ याद कर रहा हूँ? –

3

उपयोग :

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

एसक्यूएल सर्वर मेज पर तालिका नामों का भी समर्थन नहीं करता अपडेट किया जा रहा है, लेकिन इसके बाद के संस्करण एक सहसंबद्ध क्वेरी है - मेज उर्फ ​​bTABLE_A से मूल्यों में काम करेगा क्योंकि यह एक नहीं है संलग्न बिना उन क्षेत्रों उर्फ।

इससे परे एकमात्र मुद्दा यह है कि यदि TABLE_A से मेल खाने वाले रिकॉर्ड के साथ रिकॉर्ड के लिए b.importantfield मान हैं। उपयोग:

UPDATE TABLE_A 
    SET importantField = (SELECT TOP 1 
           b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

..लेकिन आप एक ORDER BY रूप में अच्छी तरह का उपयोग करना चाहिए या आप किसी भी यादृच्छिक b.importantfield मूल्य मिलेगा।

+0

मुझे जवाब लिखने के लिए समय निकालने के लिए बहुत बहुत धन्यवाद। मैंने अंत में आपके समाधान का उपयोग नहीं किया है, लेकिन मैं इसके लिए आपको धन्यवाद देना चाहता हूं। इसलिए आपका धन्यवाद :) –

संबंधित मुद्दे