मैं दो कॉलम के आधार पर एक आंतरिक जुड़ने की कोशिश कर रहा हूं और कॉलम को सही तरीके से संदर्भित करने में समस्या आ रही है। मैंने निम्नलिखित क्वेरी का उपयोग किया है जो मेरे सर्वोत्तम ज्ञान के लिए पोस्टग्रेस्क्ल के भीतर सबसे अच्छा अभ्यास है। जिन दो टेबलों पर मैं इनर जॉइन करने का प्रयास कर रहा हूं, वे हैं mk_kw और adwords_ final, दोनों कॉलम जिन्हें जोड़ा जाना है, उन्हें "की" नाम दिया गया है।

यहाँ क्वेरी है

SELECT
 *
FROM
 adwords_final
INNER JOIN mk_kw ON "mk_kw.Key" = "adwords_final.Key";

यहाँ परिणाम है

ERROR:  column "mk_kw.Key" does not exist
LINE 5: INNER JOIN mk_kw ON "mk_kw.Key" = "adwords_final.Key";
                        ^
ERROR: column "mk_kw.Key" does not exist
SQL state: 42703
Character: 51

ये कॉलम निश्चित रूप से इस संदर्भ में मौजूद हैं। क्या इन स्तंभों को संदर्भित करने का कोई बेहतर तरीका है?

बहुत धन्यवाद।

1
Ian James 9 जुलाई 2017, 17:57
3
आपको कोटेशन हटाने की जरूरत है, इसलिए इसके बजाय "mk_kw.key", यह लिखें mk_kw.key, adwords_final.Key के लिए भी आवेदन किया।
 – 
Peter Haddad
9 जुलाई 2017, 18:00
त्रुटि: स्तंभ mk_kw.key मौजूद नहीं है पंक्ति 5: INNER mk_kw पर mk_kw.key = adwords_final.key पर शामिल हों; ^ सुझाव: शायद आप "mk_kw.Key" कॉलम को संदर्भित करना चाहते थे। ********** त्रुटि *********** त्रुटि: कॉलम mk_kw.key मौजूद नहीं है SQL स्थिति: 42703 संकेत: शायद आप कॉलम "mk_kw.Key" को संदर्भित करना चाहते थे। चरित्र: 51
 – 
Ian James
9 जुलाई 2017, 19:25
हाँ बस कोटेशन हटा दें... तो इसका mk_kw.Key , डॉट के बाद आप कॉलम का नाम लिखते हैं जो Key एक कैपिटल K के साथ है।
 – 
Peter Haddad
9 जुलाई 2017, 19:27
हां, मैंने ऐसा किया लेकिन मुझे परिणाम मिलता है कि मैंने वहां शीर्ष पर पोस्ट किया।
 – 
Ian James
9 जुलाई 2017, 21:30

2 जवाब

क्वेरी बननी चाहिए:

 SELECT
 *
FROM
adwords_final
INNER JOIN mk_kw ON mk_kw.Key = adwords_final.Key;

इनर जॉइन कैसे लिखें, इसका एक नमूना यहां दिया गया है:

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

Orders और Customers टेबल के नाम हैं। CustomerID, CustomerName,OrderID कॉलम नाम हैं। ये सभी केस सेंसिटिव हैं।

0
Peter Haddad 9 जुलाई 2017, 19:32

पीटर हद्दाद का समाधान अभी भी आपको एक त्रुटि देगा क्योंकि key एक आरक्षित शब्द है। आपको क्वेरी के कॉलम नाम भाग को अलग-अलग दोहरे उद्धरण चिह्नों में लपेटने की आवश्यकता है:

SELECT 
  *
FROM 
  adwords_final 
INNER JOIN 
  mk_kw ON mk_kw."Key" = adwords_final."Key";

संपादित करें: नीचे दी गई टिप्पणियों को दर्शाने के लिए अपडेट किया गया

0
blaytenshi 20 मई 2020, 16:03
1
"कॉलम नाम केस संवेदी होते हैं" - नहीं, वे नहीं हैं। जब आप दोहरे उद्धरण चिह्नों का उपयोग करते हैं तो वे केवल केस संवेदी होते हैं। जिसका अर्थ है कि जब आपने तालिका बनाई के दौरान दोहरे उद्धरण चिह्नों का उपयोग किया था। लेकिन key को वैसे भी उद्धृत करने की आवश्यकता होगी क्योंकि यह एक आरक्षित कीवर्ड है
 – 
a_horse_with_no_name
19 मई 2020, 14:48
ओह, मुझे लगता है कि मेरा समाधान सही था लेकिन तर्क गलत था ... इसे साफ़ करने के लिए धन्यवाद! तो मान लें कि मेरे पास todo नामक एक टेबल है और userId नामक कॉलम में शामिल होना चाहता हूं, मुझे अभी भी उपयोगकर्ता आईडी को दोहराना होगा क्योंकि 'मैं' सही पूंजीकृत है?
 – 
blaytenshi
20 मई 2020, 16:00
सही: postgresql.org/docs/current/ ... लेकिन आपको वास्तव में उन खतरनाक उद्धृत पहचानकर्ताओं से बचना चाहिए। वे इसके लायक होने की तुलना में बहुत अधिक परेशानी हैं। wiki.postgresql.org/wiki/…
 – 
a_horse_with_no_name
20 मई 2020, 16:34
आह मैं देखता हूँ! मैं विकी लिंक को अधिक ध्यान से देखूंगा! मेरे पास userId होने का कारण यह है कि मैं सीक्वेलाइज़ का उपयोग कर रहा था और इसने मेरे लिए todo टेबल पर उस विदेशी कुंजी को स्वतः निर्मित कर दिया। मुझे लगता है कि मुझे इसे user_id की तरह अंडरस्कोर के साथ कॉलम नाम बनाने के लिए कॉन्फ़िगर करना चाहिए।
 – 
blaytenshi
20 मई 2020, 17:46