Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

NULLs रखते हुए कई तालिकाओं में शामिल हों

जब आप बाहरी जुड़ाव का उपयोग करते हैं, और फिर WHERE में समानता जांच में "बाहरी" कॉलम में से किसी एक का उपयोग करते हैं क्लॉज, आप अपने बाहरी जुड़ाव को आंतरिक जुड़ाव में बदल देते हैं। ऐसा इसलिए है क्योंकि आपकी स्थिति जो पोस्ट की गोपनीयता की जांच करती है, उसके लिए पोस्ट का होना आवश्यक है:

AND p.privacy = 1 OR (p.privacy = 2 AND fr.fstatus = 1)

जब एक बाहरी जुड़ाव एक पंक्ति उत्पन्न करने वाला होता है जो बिना किसी पोस्ट के अधिसूचना से मेल खाता है, तो यह उपरोक्त स्थिति की जांच करेगा। चूँकि पोस्ट वहाँ नहीं है, p.privacy NULL . का मूल्यांकन करेगा , OR . के दोनों पक्षों को "दूषित" करना , और अंततः पूरी स्थिति का मूल्यांकन false . करने के लिए किया जाता है ।

इस शर्त को ON में ले जाना शामिल होने की स्थिति समस्या का समाधान करेगी:

SELECT
  u.username AS sender,
  ux.username AS receiver,
  p.id
FROM notifications n
JOIN follows f ON (n.user_id = f.tofollow_id)
JOIN follows fr ON (n.tonotify_id = fr.tofollow_id)
JOIN user u ON (u.id = n.user_id)
JOIN user ux ON (ux.id = n.tonotify_id)
LEFT JOIN posts p ON (n.posts_id = p.id)
                 AND (p.privacy = 1 OR (p.privacy = 2 AND fr.fstatus = 1))
WHERE f.user_id = 1
  AND fr.user_id = 1
  AND f.status = 1
ORDER BY n.id DESC

इसे ठीक करने का दूसरा तरीका एक IS NULL जोड़ना होगा आपके OR . के लिए शर्त , इस तरह:

SELECT
  u.username AS sender,
  ux.username AS receiver,
  p.id
FROM notifications n
JOIN follows f ON (n.user_id = f.tofollow_id)
JOIN follows fr ON (n.tonotify_id = fr.tofollow_id)
JOIN user u ON (u.id = n.user_id)
JOIN user ux ON (ux.id = n.tonotify_id)
LEFT JOIN posts p ON (n.posts_id = p.id)
WHERE f.user_id = 1
  AND fr.user_id = 1
  AND f.status = 1
  AND (p.privacy IS NULL OR p.privacy = 1 OR (p.privacy = 2 AND fr.fstatus = 1))
ORDER BY n.id DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं प्रथम स्तर की श्रेणी को केवल एक बार प्रदर्शित करने के लिए कैसे प्राप्त करूं?

  2. किसी अन्य तालिका से एक मान के साथ डेटा मैसकल सम्मिलित करना

  3. दो तिथियों के बीच आउटपुट mysql

  4. होस्ट मशीन से कंटेनर में चल रहे mysql से कैसे कनेक्ट करें

  5. मैं अपने संपूर्ण Node.js ऐप के लिए उसी MySQL कनेक्शन का उपयोग कैसे करूं?