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

यदि कोई मिलान रिकॉर्ड नहीं है तो न्यूल के साथ दो कॉलम के सभी संयोजन प्राप्त करने के लिए MySQL क्वेरी

आपका पहला बाहरी जुड़ाव , जैसा कि अपेक्षित था, उत्पादन करता है:

| REASON |  MONTH |
-------------------
|      A |    May |
|      A |    May |
|      A |   July |
|      A |   June |
|      B |    May |
|      B |   June |
|      D | (null) |

हालाँकि, क्योंकि बाहरी जुड़ाव परिणाम उत्पन्न करते हैं यदि शामिल होने की स्थिति संतुष्ट होती है कम से कम एक बार (और केवल NULL introduce का परिचय दें रिकॉर्ड अगर हालत कभी नहीं . है संतुष्ट), आपका दूसरा बाहरी जुड़ाव तो नहीं (B, July) . के लिए एक रिकॉर्ड तैयार करें; यह Reason = 'D' . को भी गिरा देता है पूरी तरह से, क्योंकि शामिल होने की शर्त पूरी नहीं हुई है (और सभी तीन महीने कहीं और संतुष्ट हैं):

| REASON | MONTH |
------------------
|      A |   May |
|      A |   May |
|      B |   May |
|      A |  June |
|      B |  June |
|      A |  July |

जबकि आप कर सकते थे Reason = 'D' . के नुकसान को हल करें जोड़कर OR a.Month IS NULL आपकी शामिल होने की स्थिति में, आप अभी भी (B, July) . का उत्पादन नहीं करेंगे . इसके बजाय, क्योंकि आप (Reason, Month) . की प्रत्येक जोड़ी प्राप्त करना चाहते हैं , आपको CROSS JOIN आपका साकार हुआ Reasons आपके भौतिक Months . के साथ तालिका तालिका:

SELECT Reason, Month
FROM   
  (
    SELECT 'A' AS Reason
    UNION ALL SELECT 'B'
    UNION ALL SELECT 'D'
  ) Reasons CROSS JOIN (
    SELECT 'May' AS Month
    UNION ALL SELECT 'June'
    UNION ALL SELECT 'July'
  ) Months
| REASON | MONTH |
------------------
|      A |   May |
|      B |   May |
|      D |   May |
|      A |  June |
|      B |  June |
|      D |  June |
|      A |  July |
|      B |  July |
|      D |  July |

इसे sqlfiddle पर देखें ।

फिर आपको केवल अपने अंतर्निहित डेटा के साथ परिणाम में बाहरी रूप से शामिल होने की आवश्यकता है:

SELECT Reason, Month, SUM(Down_time) downtime
FROM   
  (
    SELECT 'A' AS Reason
    UNION ALL SELECT 'B'
    UNION ALL SELECT 'D'
  ) Reasons CROSS JOIN (
    SELECT 'May' AS Month
    UNION ALL SELECT 'June'
    UNION ALL SELECT 'July'
  ) Months
  LEFT JOIN tabledown USING (Reason, Month)
GROUP BY Reason, Month
| REASON | MONTH | DOWNTIME |
-----------------------------
|      A |  July |        3 |
|      A |  June |        8 |
|      A |   May |        7 |
|      B |  July |   (null) |
|      B |  June |        6 |
|      B |   May |        5 |
|      D |  July |   (null) |
|      D |  June |   (null) |
|      D |   May |   (null) |

इसे sqlfiddle पर देखें ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगी PHP डेटाबेस वर्ग

  2. MYSQL GROUP BY और ORDER BY अपेक्षित रूप से एक साथ काम नहीं कर रहा है

  3. MySQL:अद्वितीय अनुक्रमणिका `शून्य` मानों का सम्मान नहीं कर रही है

  4. गलत तालिका उपनाम के साथ प्रश्न उत्पन्न करने वाला सिद्धांत

  5. Php . में ISO8601 को दिनांक प्रारूप में कैसे बदलें