PostgreSQL: किसी अन्य तालिका से डालें


101

मैं किसी अन्य तालिका से तालिका में डेटा सम्मिलित करने का प्रयास कर रहा हूं और तालिकाओं में केवल एक कॉलम है। समस्या यह है, कि TABLE1 में ऐसे कॉलम हैं जो शून्य मानों को स्वीकार नहीं करेंगे, इसलिए मैं उन्हें खाली नहीं छोड़ सकता और मैं उन्हें TABLE2 से प्राप्त नहीं कर सकता।

मेरे पास TABLE1: id, col_1 (शून्य नहीं), col_2 (शून्य नहीं), col_3 (शून्य नहीं)

और TABLE2: id, col_a, col_b, col_c

इसलिए मैं TABLE2 से TABLE1 तक आईडी कैसे डाल सकता हूं और "data1", "data2", "data3" जैसे कठिन कोडित तारों के साथ col_1-3 को भर सकता हूं?

INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";

में परिणाम होगा:

त्रुटि: कॉलम "col_1" में अशक्त मूल्य शून्य-बाधा का उल्लंघन करता है

जवाबों:


202

चयन में बस शाब्दिक मूल्यों की आपूर्ति करें:

INSERT INTO TABLE1 (id, col_1, col_2, col_3)
SELECT id, 'data1', 'data2', 'data3'
FROM TABLE2
WHERE col_a = 'something';

एक चयनित सूची में कोई भी मूल्य अभिव्यक्ति हो सकती है :

लेकिन चयन सूची में अभिव्यक्तियों को FROM क्लॉज की तालिका अभिव्यक्ति में किसी भी कॉलम को संदर्भित करने की आवश्यकता नहीं है; उदाहरण के लिए, वे लगातार अंकगणितीय अभिव्यक्ति हो सकते हैं।

और एक स्ट्रिंग शाब्दिक निश्चित रूप से एक मूल्य अभिव्यक्ति है।



2

बहुत देर से जवाब, लेकिन मुझे लगता है कि मेरा जवाब विशिष्ट उपयोग के मामलों के लिए अधिक सीधे है जहां उपयोगकर्ता टेबल बी से तालिका ए में केवल डेटा डालना (कॉपी) करना चाहते हैं:

INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a

0

संदर्भात्मक पूर्णता के लिए:

insert into  main_tbl (col1, ref1, ref2, createdby)
values ('col1_val',
        (select ref1 from ref1_tbl where lookup_val = 'lookup1'),
        (select ref2 from ref2_tbl where lookup_val = 'lookup2'),
        'init-load'
       );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.