MySQL कई स्थितियों के साथ क्वेरी में शामिल हों - mysql, sql, चयन करें, शामिल हों, योग करें

I have 3 tables.मुझे उन 3 में शामिल होने और प्रत्येक तालिका से 2 फ़ील्ड प्राप्त करने की आवश्यकता है। और जहां कुछ स्थितियां होंगी। जहां स्थिति तिथि सीमा के लिए है। यहां तक ​​कि अगर एक तालिका का परिणाम है, तो मुझे इसे 0 के रूप में दिखाने वाले अन्य तालिका डेटा के साथ दिखाने की आवश्यकता है। मैंने इनर जॉइन का उपयोग करने की कोशिश की है। लेकिन यह क्या करता है केवल 1 ले जा रहा है जहां स्थिति और यदि पहले कोई परिणाम नहीं है तो यह अगली स्थितियों के लिए नहीं जाएगा। मेरी तालिका संरचनाएं और आवश्यक आउटपुट नीचे दिखाए गए हैं।

तालिका एक

+--------+---------+------------+
| amount | site_id |    date    |
+--------+---------+------------+
|     10 |       1 | 12/12/2014 |
|     50 |       2 | 10/12/2014 |
|     30 |       3 | 05/11/2014 |
+--------+---------+------------+

तालिका 2

+--------+---------+------------+
| amount | site_id |    date    |
+--------+---------+------------+
|    100 |       1 | 2/11/2014  |
|     40 |       2 | 10/10/2014 |
|     30 |       3 | 05/11/2014 |
+--------+---------+------------+

टेबल तीन

+--------+---------+------------+
| amount | site_id |    date    |
+--------+---------+------------+
|     60 |       1 | 12/12/2014 |
|     50 |       3 | 11/12/2014 |
|     70 |       4 | 05/09/2014 |
+--------+---------+------------+

आउटपुट: कुल मात्रा 01/12/2014 और 31/12/2014 के बीच

+---------+---------------+---------------+---------------+-------+
| site_id | table1_amount | table2_amount | table3_amount | total |
+---------+---------------+---------------+---------------+-------+
|      1 |            60 |             0 |           60   |    120|
|      3 |            0  |             0 |           50   |    50 |
+---------+---------------+---------------+---------------+-------+

क्या कोई भी इस आउटपुट को प्राप्त करने के लिए क्वेरी सुझा सकता है? मैंने अब तक यही किया है

select sum(table1.amount),sum(table2.amount),sum(table3.amount),(sum(table1.amount)+sum(table2.amount)+sum(table3.amount)) from table1 inner join table2 on table1.site_id=table2.site_id inner join table3 on table3.site_id=table2.site_id where table1.date>="01/12/2014" and table1.date<="31/12/2014" or table2.date>="01/12/2014" and table2.date<="31/12/2014" or table3.date>="01/12/2014" and table3.date<="31/12/2014" group by table1.site_id

उत्तर:

उत्तर № 1 के लिए 1

इसे इस्तेमाल करे:

SELECT S.site_id,
IFNULL(t1.table1_Amount, 0) AS table1_Amount,
IFNULL(t2.table2_Amount, 0) AS table2_Amount,
IFNULL(t3.table3_Amount, 0) AS table3_Amount,
(IFNULL(t1.table1_Amount, 0) + IFNULL(t2.table2_Amount, 0) + IFNULL(t3.table3_Amount, 0)) AS total
FROM Site S
LEFT OUTER JOIN ( SELECT t1.site_id, SUM(t1.amount) AS table1_Amount
FROM table1 t1
WHERE t1.date >= "01/12/2014" AND t1.date <= "31/12/2014"
GROUP BY t1.site_id
) AS t1 ON S.site_id = t1.site_id
LEFT OUTER JOIN ( SELECT t2.site_id, SUM(t2.amount) AS table2_Amount
FROM table2 t2
WHERE t2.date >= "01/12/2014" AND t2.date <= "31/12/2014"
GROUP BY t2.site_id
) AS t2 ON S.site_id = t2.site_id
LEFT OUTER JOIN ( SELECT t3.site_id, SUM(t3.amount) AS table3_Amount
FROM table1 t3
WHERE t3.date >= "01/12/2014" AND t3.date <= "31/12/2014"
GROUP BY t3.site_id
) AS t3 ON S.site_id = t3.site_id;

संबंधित सवाल
सबसे लोकप्रिय