2012-06-27 13 views
13

मेरे पास एक तालिका (name, date, stat1, stat2, stat3) है, (name, date) पीके है। जब मैं पंक्तियां डालता हूं, तो डुप्लिकेट कुंजी होगी, और मुझे तीन आंकड़ों को जोड़ना होगा। मैं जावा में PreparedStatement साथ निम्न क्वेरी का उपयोग:डुप्लिकेट कुंजी अपडेट पर MySQL सम्मिलित पंक्ति एकाधिक कॉलम

INSERT INTO tb (name, date, stat1, stat2, stat3) 
VALUES (?, ?, ?, ?, ?) 
ON DUPLICATE KEY UPDATE stat1 = stat1 + ?, stat2 = stat2 + ?, stat3 = stat3 + ? 

वहाँ कि प्राप्त करने के लिए अधिक संक्षिप्त क्वेरी है? क्योंकि मैंने क्वेरी को सरल बना दिया है, वहां दस से अधिक आंकड़े हैं।

उत्तर

26
INSERT INTO tb (name, date, stat1, stat2, stat3) 
VALUES (?, ?, ?, ?, ?) 
ON DUPLICATE KEY UPDATE stat1 = stat1 + VALUES(stat1), stat2 = stat2 + VALUES(stat2), stat3 = stat3 + VALUES(stat3) 
+1

यह बेहतर है। लेकिन क्या यह संभव है कि मुझे हर स्टेटस को दोहराने की ज़रूरत नहीं है? – DrXCheng

+1

अफसोस की बात है कि कोई मेटा सिंटैक्स नहीं है, केवल गणना संभव है – vearutop

+0

मुझे लगता है कि यह एक पुराना सवाल है, लेकिन दूसरा विकल्प एक स्ट्रिंग में आंकड़ों के साथ एक प्रक्रिया लिख ​​रहा है और फिर उनके माध्यम से लूपिंग (विभाजन के बाद)। कम कोड नहीं हो सकता है लेकिन यह अधिक गतिशील होगा। – inarilo

0

एक गणना कॉलम (योग) जोड़ें और अपने पीके में शामिल करें।

हालांकि, यह आपकी तालिका को denormalize करता है। आप एक किराए कुंजी का उपयोग करें और में गणना कर सकता है आपके चयन

-2

आप नकली चाबी अद्यतन पर निर्दिष्ट करें, और एक पंक्ति सम्मिलित किया जाता है कि एक अद्वितीय सूचकांक या प्राथमिक कुंजी में एक डुप्लिकेट मान का कारण होता है, तो MySQL एक प्रदर्शन पुरानी पंक्ति का अद्यतन।

सम्मिलित तालिका में (ए, बी, सी) मूल्यों (1,2,3) पर: उदाहरण के लिए, यदि स्तंभ एक अद्वितीय के रूप में घोषित और मान 1 होता है, निम्नलिखित दो बयान समान प्रभाव डिप्लिकेट कुंजी अद्यतन सी = सी + 1;

बराबर अद्यतन क्वेरी के रूप में नीचे है,

अद्यतन तालिका सेट ग = ग + 1 जहां एक = 1;

ए और बी स्तंभ अद्वितीय है, तो समतुल्य अद्यतन क्वेरी होगा,

अद्यतन तालिका सेट ग = ग + 1 जहां एक = 1 या ख = 2 सीमा 1;

+0

आप पहले से ही वही उत्तर पोस्ट कर चुके हैं [यहां] (http://stackoverflow.com/questions/20672203/insert-or-if-column-combination-exists-update/20674595#20674595)। अगर आपको लगता है कि यह सवाल समान है, तो इसे इसके बजाय डुप्लिकेट के रूप में चिह्नित करें। –

संबंधित मुद्दे