मेरे पास एक सारणी है जो अन्य टेबलों में 3 विदेशी कुंजी का उपयोग करती है। जब मैं बाएं जुड़ता हूं, तो मुझे डुप्लिकेट कॉलम मिलते हैं। MySQL का कहना है कि USING
वाक्यविन्यास डुप्लिकेट कॉलम को कम करेगा, लेकिन कई कुंजी के लिए उदाहरण नहीं हैं।MySQL: बाएं जुड़ने पर डुप्लिकेट कॉलम को हटाकर, 3 टेबल
को देखते हुए:
mysql> describe recipes;
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| ID_Recipe | int(11) | NO | PRI | NULL | |
| Recipe_Title | char(64) | NO | | NULL | |
| Difficulty | int(10) unsigned | NO | | NULL | |
| Elegance | int(10) unsigned | NO | | NULL | |
| Quality | int(10) unsigned | NO | | NULL | |
| Kitchen_Hours | int(10) unsigned | NO | | NULL | |
| Kitchen_Minutes | int(10) unsigned | NO | | NULL | |
| Total_Hours | int(10) unsigned | NO | | NULL | |
| Total_Minutes | int(10) unsigned | NO | | NULL | |
| Serving_Quantity | int(10) unsigned | NO | | NULL | |
| Description | varchar(128) | NO | | NULL | |
| ID_Prep_Text | int(11) | YES | | NULL | |
| ID_Picture | int(11) | YES | | NULL | |
| Category | int(10) unsigned | NO | | NULL | |
| ID_Reference | int(11) | YES | | NULL | |
+------------------+------------------+------+-----+---------+-------+
15 rows in set (0.06 sec)
mysql> describe recipe_prep_texts;
+------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| ID_Prep_Text | int(11) | NO | PRI | NULL | |
| Preparation_Text | varchar(2048) | NO | | NULL | |
+------------------+---------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
mysql> describe recipe_prep_texts;
+------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------+------+-----+---------+-------+
| ID_Prep_Text | int(11) | NO | PRI | NULL | |
| Preparation_Text | varchar(2048) | NO | | NULL | |
+------------------+---------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
mysql> describe mp_references;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| ID_Reference | int(11) | NO | PRI | NULL | |
| ID_Title | int(11) | YES | | NULL | |
| ID_Category | int(11) | YES | | NULL | |
+--------------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
मेरे क्वेरी बयान:
SELECT *
FROM Recipes
LEFT JOIN (Recipe_Prep_Texts, Recipe_Pictures, mp_References)
ON (
Recipe_Prep_Texts.ID_Prep_Text = Recipes.ID_Prep_Text AND
Recipe_Pictures.ID_Picture = Recipes.ID_Picture AND
mp_References.ID_Reference = Recipes.ID_Reference
);
मेरे उद्देश्य डुप्लिकेट कॉलम बिना शामिल से सभी स्तंभों में से एक पंक्ति पाने के लिए है। मैं SQL कथन भेजने और परिणाम सेट पुनर्प्राप्त करने के लिए MySQL C++ कनेक्टर का उपयोग कर रहा हूं। मेरा मानना है कि सी ++ कनेक्टर में डुप्लिकेट कॉलम नामों के साथ समस्याएं हैं।
तो एसक्यूएल कथन वाक्यविन्यास क्या है जिसका मुझे उपयोग करना चाहिए?
Reference to MySQL JOIN syntax
यह काम करता है, सिवाय इसके कि जब तालिका मौजूद नहीं है। तो मैंने इसके लिए चेक डाला। साथ ही, यह मानता है कि तालिकाओं में विदेशी कुंजी फ़ील्ड को छोड़कर अद्वितीय कॉलम नाम हैं। सौभाग्य से, मेरे पास यही है। **बहुत धन्यवाद!** –