का उपयोग करके MySQL में अनाथ रिकॉर्ड ढूंढना मैं बाएं जॉइन का उपयोग करके अलग अनाथ मेनू_इटम रिकॉर्ड खोजने की कोशिश कर रहा हूं, फिर नल मानों की जांच कर रहा हूं।LEFT JOIN
नीचे दी गई क्वेरी वास्तव में अनाथ नहीं हैं जो परिणाम लौट रही है। mitem_id menu_item तालिका के लिए प्राथमिक कुंजी है और price_info तालिका के लिए एक विदेशी कुंजी है। pinfo_id price_info तालिका और एक विदेशी कुंजी ऑर्डर विवरण तालिका के लिए प्राथमिक कुंजी है।
SELECT DISTINCT mi.mitem_id, descr
FROM menu_item mi
LEFT JOIN price_info pi ON pi.menu_item = mi.mitem_id
LEFT JOIN orderdetails od ON od.price_info = pi.pinfo_id
WHERE od.detail_id IS NULL;
रिकॉर्ड में से एक लौटे इस तरह दिखता है:
+----------+------------------+
| mitem_id | descr |
+----------+------------------+
| 926 | Alameda Pale Ale |
+----------+------------------+
मुझे कैसे पता चलेगा कि यह एक अनाथ नहीं है क्योंकि जब मैं क्वेरी चलाने है:
SELECT od.detail_id
FROM orderdetails od
INNER JOIN price_info pi ON pi.pinfo_id = od.price_info
INNER JOIN menu_item mi ON mi.mitem_id = pi.menu_item
WHERE mi.mitem_id = 926;
यह का एक सेट देता है रिकॉर्ड:
+-----------+
| detail_id |
+-----------+
| 142830 |
| 142876 |
| 143394 |
| 143610 |
यह नतीजे क्यों लौट रहे हैं जो अनाथाश्रम नहीं हैं?
बाएं जॉइन "बाएं" तालिका में मौजूद सभी प्रविष्टियों को लौटाता है, जो कि "दाएं" तालिका में हो सकता है या नहीं हो सकता है। यह अभी भी "दाएं" तालिका में रिकॉर्ड लौटाएगा क्योंकि वे "बाएं" तालिका में भी हैं। –
यदि आप बाहरी जॉइन का उपयोग कर रहे हैं तो परिणाम के लिए आपके जॉइन का अनुक्रम प्रासंगिक है। आपके प्रश्न बहुत अलग हैं। आपको अपनी अन्य तालिकाओं के लिए न्यूनतम नमूना डेटा जोड़ना चाहिए। – VMai
क्या यह संभव है कि ऑर्डर विवरण से कम से कम एक पंक्ति में शामिल हों, जहां detail_id पूर्ण है? यही है, शायद ऑर्डर विवरण से कई पंक्तियां हैं जो मेनू_इटम और price_info से मेल खाते हैं, और कम से कम एक NULL नहीं है – kane