الخلية الانضمام مع حيث شرط
-
10-07-2019 - |
سؤال
ولدي جدولين أريد أن أشارك.
وأريد من جميع الفئات في جدول الفئات وأيضا كل فئة من الفئات التي اشتركت فيها المستخدم في الجدول category_subscriptions.
وأساسا هذا هو استعلام بلدي حتى الآن:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
وهذا يعمل بشكل جيد لكن أريد أن أضيف جملة WHERE على نهاية الاستعلام الذي ثم أساسا يجعلها الداخلية / متساو الانضمام.
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
وكيف يمكنني الحصول على جميع الفئات، فضلا عن جميع فئات المشتركين من قبل مستخدم معين باستخدام استعلام واحد فقط؟
وCATEGORY_ID كونه مفتاح في كل جدول الفئات وuser_category_subscriptions. USER_ID المقيمين في الجدول user_category_subscriptions.
وذلك بفضل
المحلول
وتحتاج لوضعها في بند 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
في الأعمدة user_category_subscriptions
.
وعلى العكس من ذلك، شرط where
لا للانضمام، و<م> ثم م> يقلل من الصفوف. لذلك، وهذا يعني كل من ينضم ومن ثم يزيل كافة الصفوف حيث لا user_id
لا يساوي 1
. كنت تركت مع وسيلة غير فعالة للحصول على inner join
.
ونأمل أن يساعد هذا!
نصائح أخرى
وهذه محاولة
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
or user_category_subscriptions.user_id is null