2013-01-24 15 views
12

मैं माइस्क्ल में नया हूं। मैं मूल्य उदाहरण .for एक ही तालिका में एक और स्तंभ मान के आधार के साथ तालिका में किसी स्तंभ जोड़ना चाहते हैं मैं नीचे के रूप में company_table है:उसी तालिका में किसी अन्य कॉलम के मान के आधार पर तालिका में नया कॉलम जोड़ें

fldId | companyName | date 
-------------------------------- 
    1 | adeco  | 2012-01-12  
    2 | mic   | 2001-03-09 
    3 | manpower | Null 
    4 | linar  | Null 
    5 | dlank  | 1999-02-28 

मैं 'के मूल्य के आधार इस तालिका में' fldState 'कॉलम जोड़ना चाहते हैं तारीख 'कॉलम। उदाहरण के लिए यदि 'तिथि' कॉलम के मान फिर 'fldState' का मान 1 होना चाहिए अशक्त नहीं है और अगर यह अशक्त फिर 'fldState' का मान है जैसे

नीचे
fldId | companyName | date  | fldState 
    -------------------------------------------- 
    1  | adeco  | 2012-01-12 | 1 
    2  | mic   | 2001-03-09 | 1 
    3  | manpower | Null  | 2 
    4  | linar  | Null  | 2 
    5  | dlank  | 1999-02-28 | 1 

उत्तर

13

अपने मौजूदा तालिका से 2. होना चाहिए, आप ALTER कथन बनाने की आवश्यकता है ताकि आप नया कॉलम जोड़ सकें।

ALTER TABLE mytableName ADD fldState INT; 

के बाद बयान सफलतापूर्वक क्रियान्वित किया गया है, अब आप सभी रिकॉर्ड को अपडेट कर सकते,

UPDATE myTableName 
SET  fldState = IF(date IS NULL, 2, 1) 
7

नया नया स्तंभ आदेश

निम्नलिखित आप उपयोग कर सकते हैं जोड़ने के लिए
ALTER TABLE company_table ADD fldState; 

यदि आप उन इच्छाओं को अपनी इच्छास्थ जगह में जोड़ना चाहते हैं। जैसे आप CompanyName के बाद fldState जोड़ना चाहते हैं के रूप में, तो फिर तुम पहले कॉलम के रूप में स्तंभ जोड़ना चाहते हैं

ALTER TABLE company_table ADD fldState AFTER companyName; 

निम्नलिखित की तरह के रूप में उपयोग करते हैं, तो फिर

ALTER TABLE company_table ADD fldState FIRST; 

निम्नलिखित aslike उपयोग करें यदि आप का उपयोग नहीं करते किसी भी चीज को और फिर डिफ़ॉल्ट रूप में इसे अंतिम रूप में रखा जाएगा।

अब कॉलम डेटा कॉपी करने के लिए निम्न आदेश की तरह उपयोग करें।

UPDATE company_table SET fldState = IF(date IS NULL, 2, 1); 
2

क्या आप वाकई यही करना चाहते हैं - एक नया कॉलम जोड़ें? आप एक कॉलम पेश करके तीसरे सामान्य रूप, 3 एनएफ का उल्लंघन कर रहे हैं जो केवल तारीख पर निर्भर करता है।

आप इसके बारे में wikipedia पर और अधिक पढ़ सकते हैं। असल में आपके सभी कॉलम तालिका (पीके) के निर्धारक पर निर्भर होना चाहिए।

तो तुम क्या कर केवल उस स्तंभ पैदा कर रही है पर विचार कर सकते हैं जब आप का चयन करें:

SELECT .. fldState = (process date) 
FROM ... 

यह बेहतर होगा जब तक आप उस स्तंभ एक बहुत है, जिसमें मामले की गति धड़कता 3NF पर शामिल होने की योजना :)

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

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