2010-05-06 12 views
25

मैं अगर इसकी वास्तव में नहीं डाला एक SQLite तालिका में एक रिकॉर्ड सम्मिलित करना चाहते हैं नहीं मौजूद है।SQLite क्वेरी एक रिकॉर्ड सम्मिलित करने के लिए

मान लें कि यह तीन क्षेत्रों pk, नाम है चलो, पता

मैं नाम के साथ नया रिकॉर्ड सम्मिलित करने के लिए यदि उस नाम नहीं जोड़ा preveously चाहते हैं।

हम एक ही क्वेरी में इस के साथ क्या कर सकते हैं। कभी-कभी एसक्यूएल क्वेरीज़ से थोड़ा अलग लगता है।

उत्तर

11

क्यों नहीं बस नाम पर एक अद्वितीय सूचकांक जोड़ सकता हूँ?

+0

तालिका उपयोगकर्ताओं को बनाएं ('pk' INTEGER प्राथमिक कुंजी, 'नाम' VARCHAR (100), 'गिनती' INTEGER) ; यह मेरी वर्तमान तालिका है। मैं इसे कैसे बदल सकता हूं। क्षमा करें, मैं बस समझ सकता था :( –

+0

बस इसे मिला। तालिका उपयोगकर्ताओं को बनाएं ('पीके' इंटेग्रर प्राथमिक कुंजी, 'नाम' वचरर (100) अद्वितीय, 'गिनती' INTEGER); –

+5

क्योंकि अपवाद फेंकना यह नहीं है कि आप समस्याओं को कैसे संभालेंगे। आप जल्दी से चलाने के लिए एक क्वेरी लिख सकते हैं या आप आलसी हो सकते हैं। – Dan

68

हाँ, आप किसी एक क्वेरी के साथ ऐसा कर सकते हैं। संघर्ष पर

सम्मिलित ध्यान न दें आप मदद करनी चाहिए: http://www.sqlite.org/lang_conflict.html

नाम पर एक अद्वितीय कुंजी रखो जब आप एक रिकॉर्ड को सम्मिलित करता है, तो नाम पहले से मौजूद कोशिश, यह एक संघर्ष पैदा करेगा।

डिफ़ॉल्ट ABORT है, इसलिए IGNORE के बिना, कथन एक त्रुटि लौटाएगा। यदि आप यह नहीं चाहते हैं, तो इग्नोर का उपयोग करें।

+1

एसक्लाइट> उपयोगकर्ताओं में मूल्यों (1, 'परीक्षण', 0) कॉन्फ्लिक्ट इग्नोर पर दर्ज करें; एसक्यूएल त्रुटि: "चालू" के पास: वाक्यविन्यास त्रुटि स्क्लाइट> स्क्लाइट> इंसर्ट या इग्नोर उपयोगकर्ता VALUES (1, 'test', 0); एसक्यूएल त्रुटि: "उपयोगकर्ता" के पास: वाक्यविन्यास त्रुटि वर्गमीटर> वर्गमीटर> उपयोगकर्ताओं में मूल्यों (1, 'परीक्षण', 0) या इग्नोर; एसक्यूएल त्रुटि: "OR" के पास: वाक्यविन्यास त्रुटि क्या आप मुझे एक उदाहरण प्रदान कर सकते हैं। बस इसका सफलतापूर्वक उपयोग नहीं कर सका। मैं पहले से ही नाम की जांच करना चाहता हूं या फिर 'नया' तालिका में नहीं है, तो यह नया रिकॉर्ड जोड़ें –

+0

इसने इस मुद्दे को हल किया है। नाम फ़ील्ड में अद्वितीय जोड़ना। अब मुझे एसक्यूएल त्रुटि मिलती है और डेटा नहीं जोड़ा जाता है। टेबल उपयोगकर्ताओं को बनाने के ('पीके' पूर्णांक प्राथमिक कुंजी, 'नाम' VARCHAR (100) अद्वितीय, 'गणना' पूर्णांक); –

+16

डालने या उन मानों में ध्यान न दें ... – Konerak

22

यदि आप या INSERT OR IGNORE INTO के साथ संयोजन में UNIQUE INDEX का उपयोग नहीं कर सकते हैं, तो आप इस तरह की एक क्वेरी लिख सकते हैं;

INSERT INTO table (column) 
SELECT value 
WHERE NOT EXISTS (SELECT 1 
        FROM table 
        WHERE column = value) 
संबंधित मुद्दे