यदि आप स्वयं को ऐसी स्थिति में पाते हैं जहां आपके पास column1
. होना शुरू हो जाता है , column2
मेज पर - संभावना है कि आपका डिज़ाइन त्रुटिपूर्ण हो रहा है, और आपको इसके बजाय एक अलग तालिका बनानी चाहिए - जहां प्रत्येक columnX
अपनी एक पंक्ति प्राप्त करता है। यदि आप अपने आप को एक ही टेबल पर कई दोहराए जाने वाले कॉलम पाते हैं तो एक अलग टेबल रखना (लगभग) हमेशा बेहतर होता है।
इस तरह, आप कॉलम में अल्पविराम से अलग किए गए मानों को संग्रहीत करने से बचते हैं, यदि आप अचानक एक और मान column{X+1}
पेश करना चाहते हैं तो आप अपने कोड/क्वेरी को तोड़ने से बचते हैं - और इसके बजाय आपके पास जितने चाहें उतने या कुछ इनपुट-वैल्यू हो सकते हैं।
आपके लिए, यह land_owner_input
. नामक एक नई तालिका जैसा कुछ होगा , जहां आपके पास मूल्य है (जिसे आप columnX
. में डालेंगे ), और land_owner
. में पंक्ति का संदर्भ जिसका मान संबंधित है।
विशिष्ट डिजाइन पैटर्न कुछ इस तरह होगा।
CREATE TABLE land_owner_input (
land_owner_input_id INT(11) AUTO_INCREMENT
land_owner_id INT(11),
land_owner_input_value VARCHAR(MAX)
);
ध्यान रखें कि आपका land_owner_id
नई तालिका में ठीक उसी प्रकार और आकार का होना चाहिए जिस आईडी से इसका संदर्भ मिलता है।
आप land_owner_id
. के बीच एक विदेशी कुंजी बाधा भी बना सकते हैं और land_owner
. की आईडी डेटा अखंडता सुनिश्चित करने के लिए तालिका।
एक बार जब आप अपनी नई तालिका प्राप्त कर लेते हैं, तो आप LEFT JOIN
. का उपयोग करके उन्हें एक साथ क्वेरी कर सकते हैं (या सामान्य JOIN
यदि आप केवल पंक्तियों को वापस करना चाहते हैं यदि इसमें इनपुट-मान हैं)।
SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
ON loi.land_owner_id = lo.land_owner_id