MySQL 4 गिनती के साथ 4 टेबल का चयन करें - mysql, शामिल हों, गिनें

मेरे पास चार टेबल हैं

उपयोगकर्ताओं
आईडी display_name
1 नाम 1
2 नाम 2
3 नाम 3

उपयोगकर्ता टेबल बुक में पुस्तकें जोड़ सकता है

पुस्तकें
book_id जोड़ाByuserID
1 1
2 1
3 2
4 3

इसके अलावा कोई उपयोगकर्ता टेबल ईबुक में ईबुक जोड़ सकता है

ई बुक्स
ebook_id जोड़ाByuserID
1 1
2 2
3 2
4 3

अब एक उपयोगकर्ता केवल अपने संग्रह में पुस्तकें जोड़ सकता है (ईबुक नहीं)

संग्रह
userID book_id
1 1
1 2
1 3

मुझे इस तरह के आउटपुट की ज़रूरत है:

display_name books_added ebooks_addedbooks_in_collection
नाम 1 2 1 3
नाम 2 1 2 2
नाम 3 1 1 1

यह क्या मिला है:

SELECT users.*, COUNT(DISTINCT collection.book_id) AS books_in_collection, COUNT(DISTINCT books.AddedByuserID) AS books_added, COUNT(DISTINCT ebooks.AddedByuserID) AS ebooks_added
FROM users LEFT JOIN collection ON users.ID = collection.userID
LEFT JOIN books ON users.ID = books.AddedByuserID
LEFT JOIN ebooks ON users.ID = ebooks.AddedByuserID
GROUP BY users.ID
ORDER BY display_name ASC

उपयोगकर्ता display_name सही प्रदर्शित होता है औरसंग्रह गणना भी है, लेकिन दो अन्य मायने रखती हैं 1। यदि मैं DISTINCT को हटाता हूं तो संग्रहण गणना 86 कहती है, और दो अन्य मायने रखती हैं कुछ भी नहीं।

मैं LEFT में शामिल होने और ट्यूटोरियल पढ़ने की कोशिश करता हूं लेकिन मैं इस समय अटक गया हूं।

उत्तर:

जवाब के लिए 2 № 1

मैं सहसंबंधित सबक्वायरीज़ का सुझाव दूंगा:

select u.*,
(select count(*) from collection c where u.id = c.userId) as books_in_collection,
(select count(*) from books b where u.id = b.AddedByUserId) as books_added,
(select count(*) from ebooks e where u.id = e.AddedByUserId) as ebooks_added
from users u;

मुझे नहीं पता कि आप तीसरे उपयोगकर्ता को क्यों फ़िल्टर कर रहे हैं।


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