डेटा-संशोधित 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
. के लिए एस (विशेष मामलों को छोड़कर)। अन्यथा, यदि तालिका संरचना बदलती है, तो आपका कोड आश्चर्यजनक तरीके से टूट सकता है। -
मैंने उन कॉलमों को छोड़ दिया जहां आप बस
DEFAULT
enter दर्ज करेंगे . डिफ़ॉल्ट स्वचालित रूप से डाले जाते हैं। छोटा, वही परिणाम। -
अंतिम, वैकल्पिक
RETURNING
परिणामीuser_id
लौटाता है - जाहिर है एक अनुक्रम या किसी अन्य डिफ़ॉल्ट से। यह वास्तव मेंuser_id
हैtable3
. से , लेकिन यह वही है जब तक कि आपके पास कुछ ट्रिगर या अन्य जादू हस्तक्षेप न हो।
डेटा-संशोधित करने के बारे में अधिक (उर्फ "लिखने योग्य") सीटीई:
- क्या केवल SELECT टाइप क्वेश्चन ही नेस्ट किया जा सकता है?