2013-12-13 3 views
7

ऐसा लगता है कि यह reordering columns के लिए sqlite3 table में सीधा नहीं है। कम से कम sqlite managerfirefox में इस सुविधा का समर्थन नहीं करता है। उदाहरण के लिए, कॉलम 2 को कॉलम 3 पर ले जाएं और कॉलम 5 को कॉलम 2 पर ले जाएं। एसक्लाइट टेबल में कॉलम को पुन: व्यवस्थित करने का कोई तरीका है, या तो स्क्लाइट प्रबंधन सॉफ्टवेयर या स्क्रिप्ट के साथ? धन्यवाद।स्क्लाइट 3: तालिका में स्तंभों को फिर से व्यवस्थित करने के लिए कैसे?

उत्तर

18

यह किसी भी डीबीएमएस में एक छोटा काम नहीं है। आपको निश्चित रूप से इच्छित क्रम के साथ एक नई तालिका बनाना होगा, और अपने डेटा को एक तालिका से क्रम में ले जाना होगा। स्तंभों को पुन: व्यवस्थित करने के लिए कोई तालिका विवरण नहीं है, इसलिए या तो स्क्लाइट प्रबंधक या किसी अन्य स्थान पर, आपको उसी तालिका में ऐसा करने का कोई तरीका नहीं मिलेगा।

तुम सच में आदेश बदलना चाहते हैं, तो आप कर सकता है:

मान लिया जाये कि आप TableA है:

:

create table tableA(
col1 int, 
col3 int, 
col2 int); 

आप कॉलम के साथ जिस तरह से आप चाहते हैं अनुसार क्रमबद्ध एक tableB बना सकते हैं

create table tableB(
col1 int, 
col2 int, 
col3 int); 

फिर TableA से tableB में डेटा ले:

insert into tableB 
SELECT col1,col2,col3 
FROM tableA; 

फिर मूल TableA हटाने और TableA को tableB नाम बदलने:

DROP table tableA; 
ALTER TABLE tableB RENAME TO tableA; 

sqlfiddle demo

+0

उपरोक्त tabelB में डालने की कमांड के लिए, क्या यह आईडी को भी रखता है? हमें उसी तालिका वाले नए टेबल में रिकॉर्ड की आवश्यकता है जैसा कि यह तालिका ए में था। – user938363

+0

निश्चित रूप से। यदि उनमें से एक कॉलम आईडी है, तो इसे नई तालिका में माइग्रेट कर दिया जाएगा। –

+1

@ फिलिप सिल्वा क्या होगा यदि आईडी कॉलम ऑटोमेशन पर सेट है? – pavitran

7

तुम हमेशा कॉलम आदेश कर सकते हैं लेकिन आप अपने SELECT कथन में करना चाहते हैं, इस तरह:

SELECT column1,column5,column2,column3,column4 
FROM mytable 
WHERE ... 

आप की जरूरत नहीं होनी चाहिए "आदेश" उन्हें तालिका में ही करने के लिए।

+0

2 टेबल की स्कीमा से मिलान करने की आवश्यकता है ताकि डेटा को एक से दूसरे में कॉपी किया जा सके। कॉपी करते समय स्क्लाइट 3 आयात कॉलम से मेल नहीं खाता है। तो हम उदाहरण के लिए टेक्स्ट कॉलम के तहत पूर्णांक कॉलम के साथ समाप्त होते हैं। – user938363

2

आदेश sqlite3 में फर्क पड़ता है। वैचारिक रूप से, ऐसा नहीं होना चाहिए, लेकिन साबित होता है कि यह करता है इस प्रयोग की कोशिश:

CREATE TABLE SomeItems (identifier INTEGER PRIMARY KEY NOT NULL, filename TEXT NOT NULL, path TEXT NOT NULL, filesize INTEGER NOT NULL, thumbnail BLOB, pickedStatus INTEGER NOT NULL, deepScanStatus INTEGER NOT NULL, basicScanStatus INTEGER NOT NULL, frameQuanta INTEGER, tcFlag INTEGER, frameStart INTEGER, creationTime INTEGER); 

20.000 के बारे में रिकॉर्ड जहां थंबनेल एक छोटे से jpeg है साथ तालिका आबाद। तो फिर इस तरह के प्रश्नों की एक जोड़ी कार्य करें:

time sqlite3 Catalog.db 'select count(*) from SomeItems where filesize = 2;' 
time sqlite3 Catalog.db 'select count(*) from SomeItems where basicscanstatus = 2;' 

कोई फर्क नहीं पड़ता कि कितने रिकॉर्ड लौटा दिए जाते हैं, मेरे मशीन पर, पहली क्वेरी 0m0.008s के बारे में लेता है और दूसरा क्वेरी 0m0.942s लेता है। भारी अंतर, और कारण ब्लॉब के कारण है; फाइलसाइज ब्लॉब से पहले है और बेसिक्सकैनैटस के बाद है।

अब हमने ब्लॉब को अपनी तालिका में ले जाया है, और हमारा ऐप खुश है।

+1

यह बहुत दिलचस्प है, हालांकि यह सवाल का जवाब नहीं देता है। – sapht

+0

सच है। फिलिप सिल्वा का जवाब सवाल का जवाब देता है।मेरा जवाब इस बारे में अधिक था कि इसे क्यों करने की आवश्यकता है, यानी प्रश्न को मान्य करता है। हमें यह करना था, और ऑर्डर बदलने का कोई छोटा रास्ता नहीं था, इसलिए हमने दूसरी टेबल बनाई और उस तालिका में धीमी कॉलम डाली। इससे हमारे लिए प्रदर्शन में एक बड़ा अंतर आया। – user8353681

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

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