डेटा-संशोधित CTEs का उपयोग करें अपने तीन INSERTs को चेन करने के लिए। कुछ इस तरह:
WITH ins1 AS (
INSERT INTO table1 (username, name, surname)
VALUES ('johnee','john','smith')
RETURNING user_id
)
, ins2 AS (
INSERT INTO table2 (user_id, password)
SELECT ins1.user_id, 'secret'
FROM ins1 -- nothing to return here
)
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;
-
आमतौर पर कॉलम परिभाषा सूची add जोड़ना सबसे अच्छा होता है
INSERT. के लिए एस (विशेष मामलों को छोड़कर)। अन्यथा, यदि तालिका संरचना बदलती है, तो आपका कोड आश्चर्यजनक तरीके से टूट सकता है। -
मैंने उन कॉलमों को छोड़ दिया जहां आप बस
DEFAULTenter दर्ज करेंगे . डिफ़ॉल्ट स्वचालित रूप से डाले जाते हैं। छोटा, वही परिणाम। -
अंतिम, वैकल्पिक
RETURNINGपरिणामीuser_idलौटाता है - जाहिर है एक अनुक्रम या किसी अन्य डिफ़ॉल्ट से। यह वास्तव मेंuser_idहैtable3. से , लेकिन यह वही है जब तक कि आपके पास कुछ ट्रिगर या अन्य जादू हस्तक्षेप न हो।
डेटा-संशोधित करने के बारे में अधिक (उर्फ "लिखने योग्य") सीटीई:
- क्या केवल SELECT टाइप क्वेश्चन ही नेस्ट किया जा सकता है?