आईडी मिलान के आधार पर एक टेबल से दूसरे तालिका में SQL अद्यतन




sql-server select (14)

MySQL के लिए जो ठीक काम करता है:

UPDATE
    Sales_Import SI,RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID

मेरे पास account numbers और card numbers डेटाबेस हैं। मैं खाता संख्या में किसी भी कार्ड नंबर को update करने के लिए फ़ाइल से मेल खाता हूं, ताकि मैं केवल खाता संख्याओं के साथ काम कर रहा हूं।

मैंने Table ID और संबंधित खाता संख्या वापस करने के लिए Table ID / खाते डेटाबेस से तालिका को जोड़ने का एक दृश्य बनाया, और अब मुझे उन रिकॉर्ड्स को अपडेट करने की आवश्यकता है जहां आईडी खाता संख्या से मेल खाता है।

यह Sales_Import तालिका है, जहां account number फ़ील्ड को अपडेट करने की आवश्यकता है:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

और यह RetrieveAccountNumber तालिका है, जहां मुझे अपडेट करने की आवश्यकता है:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

मैंने नीचे की कोशिश की, लेकिन अब तक कोई भाग्य नहीं है:

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID = 
                                                RetrieveAccountNumber.LeadID) 

यह खाता संख्याओं के लिए कार्ड नंबर अपडेट करता है, लेकिन खाता संख्याओं को न्यूल द्वारा प्रतिस्थापित किया जाता NULL


PostgreSQL के लिए:

UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID; 

एक ही तालिका में अपडेट करें:

  DECLARE @TB1 TABLE
    (
        No Int
        ,Name NVarchar(50)
        ,linkNo int
    )

    DECLARE @TB2 TABLE
    (
        No Int
        ,Name NVarchar(50)
        ,linkNo int
    )

    INSERT INTO @TB1 VALUES(1,'changed person data',  0);
    INSERT INTO @TB1 VALUES(2,'old linked data of person', 1);

INSERT INTO @TB2 SELECT * FROM @TB1 WHERE linkNo = 0


SELECT * FROM @TB1
SELECT * FROM @TB2


    UPDATE @TB1 
        SET Name = T2.Name
    FROM        @TB1 T1
    INNER JOIN  @TB2 T2 ON T2.No = T1.linkNo

    SELECT * FROM @TB1

एसक्यूएल सर्वर 2008 + मालिकाना UPDATE ... FROM बजाय MERGE का उपयोग करना UPDATE ... FROM वाक्यविन्यास से कुछ अपील है।

साथ ही साथ मानक एसक्यूएल और इस प्रकार अधिक पोर्टेबल होने पर यह अंतिम परिणाम होने के बजाय स्रोत पक्ष पर एकाधिक जुड़ी पंक्तियों (और इस प्रकार अद्यतन में उपयोग करने के लिए कई संभावित भिन्न मूल्य) होने की स्थिति में एक त्रुटि भी उठाएगा। ।

MERGE INTO Sales_Import
   USING RetrieveAccountNumber
      ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
   UPDATE 
      SET AccountNumber = RetrieveAccountNumber.AccountNumber;

दुर्भाग्यवश, जिसकी पसंद का उपयोग पूरी तरह से पसंदीदा शैली में नहीं आ सकता है। SQL सर्वर में MERGE कार्यान्वयन को विभिन्न बग से पीड़ित किया गया है। हारून बर्ट्रेंड ने यहां रिपोर्ट किए गए लोगों की एक सूची संकलित की है


नीचे दिया गया एसक्यूएल किसी ने सुझाव दिया है, SQL सर्वर में काम नहीं करता है। यह वाक्यविन्यास मुझे मेरी पुरानी स्कूल कक्षा की याद दिलाता है:

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

इन सभी प्रश्नों का उपयोग NOT IN करते हैं या NOT EXISTS इन्हें अनुशंसित नहीं किया जाता है। एनयूएलएल दिखाते हैं क्योंकि ओपी छोटे डेटासेट के साथ पूरे डेटासेट की तुलना करता है, तो निश्चित रूप से मिलान समस्या होगी। यह NOT IN का उपयोग करके समस्या को हल करने के बजाय सही JOIN साथ उचित SQL लिखकर तय किया जाना चाहिए। इस मामले में आप इन NOT EXISTS कर सकते हैं या NOT EXISTS अन्य समस्याओं का उपयोग कर सकते हैं।

शीर्ष पर मेरा वोट, जो कि SQL सर्वर में शामिल होने से किसी अन्य तालिका के आधार पर तालिका को अद्यतन करने का पारंपरिक तरीका है। जैसे मैंने कहा, आप SQL सर्वर में उसी UPDATE दिनांक में दो तालिकाओं का उपयोग नहीं कर सकते हैं जबतक कि आप पहले उनसे जुड़ें।


प्रतिक्रियाओं के लिए धन्यवाद। मुझे एक समाधान मिला।

UPDATE Sales_Import 
SET    AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  Sales_Import.leadid =RetrieveAccountNumber.LeadID) 
WHERE Sales_Import.leadid = (SELECT  RetrieveAccountNumber.LeadID 
                             FROM   RetrieveAccountNumber 
                             WHERE  Sales_Import.leadid = RetrieveAccountNumber.LeadID)  

मुझे foo.new साथ वही समस्या थी जो foo पंक्तियों के लिए null हो गई थी, जिसमें bar में कोई मिलान कुंजी नहीं थी। मैंने ओरेकल में ऐसा कुछ किया:

update foo
set    foo.new = (select bar.new
                  from bar 
                  where foo.key = bar.key)
where exists (select 1
              from bar
              where foo.key = bar.key)

मेरा मानना ​​है कि एक JOIN UPDATE FROM करने में मदद मिलेगी:

एमएस एसक्यूएल

UPDATE
    Sales_Import
SET
    Sales_Import.AccountNumber = RAN.AccountNumber
FROM
    Sales_Import SI
INNER JOIN
    RetrieveAccountNumber RAN
ON 
    SI.LeadID = RAN.LeadID;

MySQL और मारिया डीबी

UPDATE
    Sales_Import SI,
    RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID;

मैं एक्सेस एसक्यूएल या वीबीए कोड के लिए यह अद्यतन जोड़ना चाहता हूं: हमें एसईटी से पहले जॉइन करना है।

एसक्यूएल एक्सेस करें

UPDATE
    Sales_Import
INNER JOIN
    RetrieveAccountNumber 
ON 
    Sales_Import.LeadID = RetrieveAccountNumber.LeadID
SET
    Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;

मैंने सोचा कि यह एक साधारण उदाहरण है कि किसी को यह आसान हो सकता है,

        DECLARE @TB1 TABLE
        (
            No Int
            ,Name NVarchar(50)
        )

        DECLARE @TB2 TABLE
        (
            No Int
            ,Name NVarchar(50)
        )

        INSERT INTO @TB1 VALUES(1,'asdf');
        INSERT INTO @TB1 VALUES(2,'awerq');


        INSERT INTO @TB2 VALUES(1,';oiup');
        INSERT INTO @TB2 VALUES(2,'lkjhj');

        SELECT * FROM @TB1

        UPDATE @TB1 SET Name =S.Name
        FROM @TB1 T
        INNER JOIN @TB2 S
                ON S.No = T.No

        SELECT * FROM @TB1

यह postgresql के साथ काम करता है

UPDATE application
SET omts_received_date = (
    SELECT
        date_created
    FROM
        application_history
    WHERE
        application.id = application_history.application_id
    AND application_history.application_status_id = 8
);

यह आपको किसी अन्य तालिका में नहीं मिले कॉलम मान के आधार पर एक तालिका को अपडेट करने की अनुमति देगा।

    UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
            SELECT * 
            FROM (
                    SELECT table1.id
                    FROM  table1 
                    LEFT JOIN table2 ON ( table2.column = table1.column ) 
                    WHERE table1.column = 'some_expected_val'
                    AND table12.column IS NULL
            ) AS Xalias
    )

यह दोनों टेबलों में प्राप्त कॉलम मान के आधार पर एक तालिका अपडेट करेगा।

    UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
            SELECT * 
            FROM (
                    SELECT table1.id
                    FROM  table1 
                    JOIN table2 ON ( table2.column = table1.column ) 
                    WHERE table1.column = 'some_expected_val'
            ) AS Xalias
    )

MySQL के लिए :

UPDATE table1 JOIN table2 
ON table1.id = table2.id
SET table1.name = table2.name,
table1.`desc` = table2.`desc`

एसक्यूएल सर्वर के लिए :

UPDATE table1
SET table1.name = table2.name,
table1.[desc] = table2.[desc]
FROM table1 JOIN table2 
ON table1.id = table2.id

मैंने उपरोक्त सभी प्रश्नों का उपयोग किया है, लेकिन वे काम नहीं कर रहे हैं; और जब मैंने इसका इस्तेमाल किया, तो यह हो गया।

आप इसे यहां से भी पकड़ सकते हैं, https://.com/questions/5036918/update-one-table-with-data-from-another

आशा है कि आप इसे प्राप्त करें। धन्यवाद


इसे इस्तेमाल करे :

UPDATE
    Table_A
SET
    Table_A.AccountNumber = Table_B.AccountNumber ,
FROM
    dbo.Sales_Import AS Table_A
    INNER JOIN dbo.RetrieveAccountNumber AS Table_B
        ON Table_A.LeadID = Table_B.LeadID 
WHERE
    Table_A.LeadID = Table_B.LeadID




sql-update