आपको इसे join
. में डालना होगा खंड, न कि where
:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON
user_category_subscriptions.category_id = categories.category_id
and user_category_subscriptions.user_id =1
देखें, एक inner join
. के साथ , join
. में एक क्लॉज डालकर या where
समकक्ष है। हालांकि, outer join
. के साथ , वे बहुत अलग हैं।
join
. के रूप में शर्त, आप उस रोसेट को निर्दिष्ट करते हैं जिसे आप तालिका में शामिल करेंगे। इसका मतलब है कि यह user_id = 1
. का मूल्यांकन करता है सबसे पहले, और user_category_subscriptions
. का सबसेट लेता है user_id
. के साथ का 1
categories
. में सभी पंक्तियों में शामिल होने के लिए . यह आपको categories
. में सभी पंक्तियाँ देगा , जबकि केवल categories
कि इस विशेष उपयोगकर्ता ने सदस्यता ली है, उसके पास user_category_subscriptions
में कोई भी जानकारी होगी स्तंभ। बेशक, अन्य सभी categories
null
with से भर जाएगा user_category_subscriptions
. में कॉलम।
इसके विपरीत, एक where
खंड शामिल होता है, और फिर रोसेट को कम करता है। तो, यह सभी जॉइन करता है और फिर उन सभी पंक्तियों को हटा देता है जहां user_id
1
के बराबर नहीं है . आपके पास inner join
. प्राप्त करने का एक अक्षम तरीका है ।
उम्मीद है कि यह मदद करता है!