मैं एक बार में एक पोस्टग्रेज टेबल में कई मान कैसे डालूं?


93

मेरे पास एक तालिका है जिसे मैं एक बार में कई मानों को अपडेट करने की कोशिश कर रहा हूं। यहाँ तालिका स्कीमा है:

    Column     |  Type   | Modifiers 
---------------+---------+-----------
 user_id       | integer | 
 subservice_id | integer |

मेरे पास एक से अधिक बार user_idसम्मिलित करने के लिए है subservice_id। क्या इसमें कोई सिंटैक्स है Postgresजो मुझे ऐसा कुछ करने देगा

insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);

यह मैं कैसे करूंगा?


1
आप उन्हें एक दृश्य, या का उपयोग करने से सम्मिलित करना चाहते हैं तो generate_seriesदेखें dba.stackexchange.com/a/89544/16892
rogerdpack

जवाबों:



172

बहु-मूल्य सम्मिलित सिंटैक्स है:

insert into table values (1,1), (1,2), (1,3), (2,1);

लेकिन क्रॉकोडिल्को का जवाब बहुत चालाक है।


इन विधियों में से किसी के साथ, वहाँ भी एक तरीका है id?
प्रात: an

2
हां, लौटने का उपयोग करें। "तालिका में डालें (आईडी, यादा) मान (1,2), (9,22) वापसी आईडी;" आदि
स्कॉट मारलो

1
इसके अलावा आजकल एक CTE उर्फ ​​बयान के साथ अक्सर अच्छी तरह से काम करता है।
स्कॉट मार्लो

पूर्णांक मान ऊपर की तरह सम्मिलित कर सकते हैं। लेकिन उपरोक्त विधि का उपयोग करते हुए पाठ सम्मिलित करते समय इसकी त्रुटि हो रही है जैसे स्तंभ मौजूद नहीं है। insert into orders_cancel_reasons_infos values (1,1,"Changed my mind",1), (2,2,"Quality not satisfactory",1), (3,3,"Incompatible or not useful",1), (4,4,"Damaged product but shipping box is good",1), (5,5,"Items arrived too late",1), (6,6,"Missing part or accessories",1), (7,7,"Product and shipping box are damaged",1), (8,8,"Wrong item was sent",1), (9,9,"Defective item",1), (10,10,"Inaccurate description",1), (11,11,"Other",1);
संकर मुनियप्पा

@sankarmuniyappa आपको ' 'उस पाठ के लिए एकल उद्धरण का उपयोग करना होगा जिसे आप सम्मिलित कर रहे हैं। ऐसा कुछ, insert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)काम करेगा। आप देख सकते हैं इस सिंगल और डबल-उद्धरण के बारे में अधिक के लिए बाहर।
dr0pdb

25

Krokodilko के उत्तर का एक छोटा संस्करण:

insert into user_subservices(user_id, subservice_id) 
values(1, unnest(array[1, 2, 3]));

मुझे लगता है कि यह स्वीकृत उत्तर की तुलना में इरादे से अधिक स्पष्ट है। क्या यह मानक SQL या PostgreSQL-specific है?
बर्नार्ड

3
दोनों उत्तर PostgreSQL- विशिष्ट हैं। स्वीकृत उत्तर शायद अन्य डेटाबेस में आसानी से अनुवादित है, उदाहरण के लिए ओरेकल insert into user_subservices(user_id, subservice_id) select 1, column_value from table(sys.odcinumberlist(1,2,3)):।
yallie

धन्यवाद, यह बहुत अधिक समझ में आता है और मेरी राय में स्वीकृत उत्तर की तुलना में अधिक पठनीय है।
ठंढा

1
एक अन्य तालिका से जानकारी के साथ इसका उपयोग करने का एक तरीका: insert into user_subservices(user_id, subservice_id) values(1, unnest(ARRAY(select id from subservices where name like '%test%')));
एफ्रेन

12

थोड़ा संबंधित जवाब क्योंकि मैं हर बार इस सवाल को हल करने की कोशिश करता हूं। कई कॉलम के साथ कई पंक्तियाँ डालें :

insert into user_subservices (user_id, subservice_id)
select *
from unnest(array[1, 2], array[3, 4]);

3

अधिक मजबूत उदाहरण, जब आपको किसी तालिका में प्रत्येक पंक्ति के लिए किसी तालिका में कई पंक्तियों को सम्मिलित करने की आवश्यकता होती है:

INSERT INTO user_subservices (user_id, subservice_id)
SELECT users.id AS user_id, subservice_id
FROM users
CROSS JOIN unnest(ARRAY[1,2,3]) subservice_id;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.