मेरे पास एक प्रश्न है जो इस प्रकार है:

INSERT INTO accounts(id, description, followers_count, friends_count, statuses_count)
VALUES(%s, %s, %s, %s, %s)
ON CONFLICT DO UPDATE
SET description=EXCLUDED.description, 
    followers_count=EXCLUDED.followers_count, 
    friends_count=EXCLUDED.friends_count, 
    statuses_count=EXCLUDED.statuses_count;

अब description, followers_count, friends_count, statuses_count सभी NULL हो सकते हैं। मेरा सवाल यह है कि क्या इस क्वेरी को केवल तभी अपडेट किया जा सकता है जब ये मान न्यूल न हों।

उदाहरण के लिए जब: description='joey tribbiani' followers_count=45 friends_count=90 statuses_count=15 NULL मानों के साथ अपडेट न करें। लेकिन जब यह दूसरी तरफ हो, तो अपडेट करें।

1
Michael Kročka 30 सितंबर 2020, 13:17

2 जवाब

सबसे बढ़िया उत्तर

आप कोलेस () का उपयोग कर सकते हैं:

INSERT INTO accounts(id, description, followers_count, friends_count, statuses_count)
VALUES(%s, %s, %s, %s, %s)
ON CONFLICT DO UPDATE
SET description = coalesce(EXCLUDED.description, accounts.description), 
    followers_count = coalesce(EXCLUDED.followers_count, accounts.followers_count),
    friends_count = coalesce(EXCLUDED.friends_count, accounts.friends_count),
    statuses_count = coalesce(EXCLUDED.statuses_count, accounts.statuses_count);
1
a_horse_with_no_name 30 सितंबर 2020, 13:22

आप COALESCE() का उपयोग SET खंड में कर सकते हैं:

INSERT INTO accounts(id, description, followers_count, friends_count, statuses_count)
VALUES(%s, %s, %s, %s, %s)
ON CONFLICT DO UPDATE
SET description     = COALESCE(EXCLUDED.description, description)
    followers_count = COALESCE(EXCLUDED.followers_count, followers_count), 
    friends_count   = COALESCE(EXCLUDED.friends_count, friends_count), 
    statuses_count  = COALESCE(EXCLUDED.statuses_count, statuses_count);

जब insert के लिए दिया गया मान null है, तो यह मूल तालिका मान पर वापस आ जाता है, जो असाइनमेंट को नो-ऑप में बदल देता है।

1
GMB 30 सितंबर 2020, 13:22