2010-07-27 7 views
5

मैं अगर यह वहाँ नहीं है तो मैं यहाँ खोज की है और एक समाधान पाया एक रिकार्ड डालने के लिए एक समाधान चाहता था, लेकिन मैं एक और समस्याडालने रिकॉर्ड एसक्यूएल में मौजूद रहने पर नहीं, डुप्लिकेट स्तंभ नाम

INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2, 2) AS tmp 
WHERE NOT EXISTS (
    SELECT question_id FROM closed_answers WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

उत्पादन

#1060 - Duplicate column name '2' 

अगर मैं किसी भी 2 नंबर होते हैं जो समान नहीं हैं इस्तेमाल किया यह काम करेगा, लेकिन समस्या पैदा होती है जब 2 नंबर एक ही

उत्तर

13

छोटी से छोटी अपने एसक्यूएल काम करने के लिए परिवर्तन कर रहे हैं करने के लिए अन्य नामों को जोड़ने के लिए है तुम्हारा मुहर सीटी बयान:

INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2 AS question_id, 2 AS subject_id) AS tmp 
WHERE NOT EXISTS (
    SELECT question_id 
    FROM closed_answers 
    WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

लेकिन यदि आप (question_id, subject_id) पर एक अद्वितीय बाधा है तो आप INSERT IGNORE बजाय का उपयोग कर सकते हैं:

INSERT IGNORE INTO closed_answers (question_id, subject_id) 
VALUES (2, 2) 
+0

इसने मुझे यहां बहुत मदद की: http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table/3164741#comment33044636_3164741 –

3
INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2 a, 2 b) AS tmp 
WHERE NOT EXISTS ( 
    SELECT 1 FROM closed_answers WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

सबक्वेरी के साथ आपके चुनिंदा बयान अजीब एक अनावश्यक है, लेकिन समस्या यह है यह था कि आपने चुने गए कॉलम का नाम नहीं दिया था। अस्तित्व का उपयोग करते समय, केवल फ़ील्ड के बजाय 1 का चयन करने के लिए पर्याप्त है। इसके अलावा सीमा 1 आवश्यक नहीं था।

+0

आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है ; मैन्युअल रूप से उपयोग करने के लिए सही सिंटैक्स के लिए आपके MySQL सर्वर संस्करण से मेल खाता है, जहां 'EXISTS ( बंद_नवार्स से SELECT 1 देखें, प्रश्न_आईडी = 2 और सबजे' लाइन 3 –

+0

पर अच्छा कॉल मार्क .. मैंने उस दूसरे उदाहरण को हटा दिया, मेरे मस्तिष्क में मस्तिष्क मर गया था। – Fosco

+0

@ मार्कबियर मेरे मामले में, आपका उत्तर वाक्यविन्यास त्रुटि का कारण बनता है। लेकिन फॉस्को के उत्तर में कोई त्रुटि नहीं है। मैं मारियाडीबी का उपयोग कर रहा हूं। –

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