2012-09-10 22 views
15

यह क्वेरी "डुप्लिकेट प्रविष्टि" त्रुटि क्यों उत्पन्न करती है?चयन करें DISTINCT काम नहीं कर रहा

TRUNCATE parim_firm_tag_names; 
INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona 
    FROM parim_marksona; 

त्रुटि संदेश:

एसक्यूएल त्रुटि (1062): प्रवेश डुप्लिकेट '1 - ??????? ?????? ' कुंजी 'firm_tag_name_value'

आप देख सकते हैं के लिए, firm_tag_name_value एक अद्वितीय सूचकांक है, मैं DISTINCT चयन का उपयोग करें और मैं tag_names से सभी मौजूदा डेटा को छोटा कर रहा हूँ।

इस त्रुटि का उत्पादन क्या हो सकता है?

+0

दोनों तालिकाओं की परिभाषाएं क्या हैं? शायद अलग डेटाटाइप या विभिन्न केस संवेदनशीलता विकल्पों के बीच निहित रूपांतरणों का असर? –

+2

मुझे लगता है कि इसे 'parim_marksona.sona' बनाम' parim_firm_tag_names.firm_tag_name_value' में वर्ण सेट (कॉलेशन) के साथ करना है। त्रुटि संदेश में प्रश्न-चिह्न बताते हैं कि डेटा में कुछ गैर-अंग्रेज़ी वर्ण हैं। –

+0

कृपया इस त्रुटि के लिए सटीक कारण देखने के लिए तालिका संरचना प्रदान करें। –

उत्तर

16

यह अलग collations दोनों तालिकाओं parim_firm_tag_names और parim_marksona स्ट्रिंग केस संवेदी हैं और केस संवेदी collation मूल्यों पर विभिन्न मूल्यों में अलग मई परिणामों का उपयोग तुलना के रूप में पर परिभाषित की वजह से हो रहा हो सकता।

आपने इस क्वेरी का उपयोग कर स्तंभों की collation जाँच कर सकते हैं:

SHOW FULL COLUMNS FROM parim_marksona; 
SHOW FULL COLUMNS FROM parim_firm_tag_names; 

इस त्रुटि से बचने के लिए, आपको, स्तंभ firm_tag_name_valueCOLLATE का उपयोग करने का मिलान करने के लिए स्तंभ sona का मिलान में बदल सकते हैं, जबकि तालिका parim_marksona से अलग मानों को चुन ।

latin1_swedish_cs के रूप में स्तंभ firm_tag_name_value का मिलान मान लिया जाये:

TRUNCATE parim_firm_tag_names; 

INSERT INTO parim_firm_tag_names (firm_tag_name_value) 
    SELECT DISTINCT sona COLLATE latin1_swedish_cs 
    FROM parim_marksona; 

यह त्रुटियों के बिना काम करना चाहिए।

अधिक जानकारी के लिए मैनुअल Column Character Set and Collation देखें।

+1

हाँ, बस यह पता लगाया :) आप विजेता हैं :) – Kristian

1

शायद दो टेबल के बीच अलग-अलग चरित्र सेट हो?

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