अगर आपको कोई त्रुटि मिल रही है जिसमें "ERROR 1054 (42S22):'ऑन क्लॉज' में अज्ञात कॉलम 'tab.ColName'' लिखा हुआ है। मारियाडीबी में, यहां तीन संभावित कारण हैं:
- कॉलम मौजूद नहीं है।
- आप एक उपनाम वाले कॉलम को उसके कॉलम नाम से संदर्भित करने का प्रयास कर रहे हैं।
- या यह दूसरी तरह से हो सकता है। आप कॉलम को किसी ऐसे उपनाम से संदर्भित कर सकते हैं जिसे कभी घोषित नहीं किया गया था।
यदि किसी कॉलम में एक उपनाम है, तो आपको उस उपनाम का उपयोग किसी भी ON
. में संदर्भित करते समय करना चाहिए क्लॉज जब दो या दो से अधिक टेबल के खिलाफ जॉइन करते हैं। इसके विपरीत, यदि आप किसी स्तंभ को किसी उपनाम से संदर्भित करते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि उपनाम वास्तव में पहले स्थान पर घोषित किया गया है।
उदाहरण 1
यहां कोड का एक उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
परिणाम:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
यहाँ मैंने गलती से c.DogName
. का प्रयोग किया है ON
. में क्लॉज जब मैं c.CatName
. का उपयोग करना चाहता था ।
इस मामले में, फिक्स सरल है। सही कॉलम नाम का प्रयोग करें:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
उदाहरण 2
यहां कोड का एक और उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
परिणाम:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
यहां मैंने ON
. में एक गैर-मौजूद उपनाम का संदर्भ दिया है खंड। मैंने c.CatName
. का इस्तेमाल किया CatName
. को संदर्भित करने के लिए Cats
. में कॉलम टेबल। एकमात्र समस्या यह है कि Cats
तालिका का कोई उपनाम नहीं है।
इस समस्या को ठीक करने के लिए, हमें केवल Cats
. के लिए एक उपनाम प्रदान करना है तालिका:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
वैकल्पिक रूप से, हम उपनाम के सभी संदर्भ हटा सकते हैं, और केवल पूर्ण तालिका नाम का उपयोग कर सकते हैं:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
एक बात जो मुझे बतानी चाहिए वह यह है कि, इस उदाहरण में हमने SELECT
में कॉलम नामों को प्रीफ़िक्स नहीं किया है उपनाम के साथ सूची। अगर हमने ऐसा किया होता, तो हमें वही त्रुटि दिखाई देती, लेकिन थोड़े अलग संदेश के साथ:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
परिणाम:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
इस मामले में, यह ON
. में से एक को खोजने से पहले फ़ील्ड सूची में अज्ञात कॉलम का पता लगाता है खंड। किसी भी तरह से, समाधान वही है।
उदाहरण 3
यहां कोड का एक और उदाहरण दिया गया है जो त्रुटि उत्पन्न करता है:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
परिणाम:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
इस मामले में, Cats
. के लिए एक उपनाम घोषित किया गया था तालिका, लेकिन मैंने उस उपनाम का उपयोग ON
. में नहीं किया खंड।
यहाँ समाधान, तालिका नाम के बजाय उपनाम का उपयोग करना है:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;