2009-05-05 9 views
37

मेरे पास दो टेबल हैं: खिलौने और गेम्स।मैं दो अलग-अलग तालिकाओं पर दो गिनती (*) परिणाम कैसे जोड़ूं?

+--------------------+------------------+ 
| Field    | Type    | 
+--------------------+------------------+ 
| toy_id    | int(10) unsigned | 
| little_kid_id  | int(10) unsigned | 
+--------------------+------------------+ 

+--------------------+------------------+ 
| Field    | Type    | 
+--------------------+------------------+ 
| game_id   | int(10) unsigned | 
| little_kid1  | int(10) unsigned | 
| little_kid2  | int(10) unsigned | 
| little_kid3  | int(10) unsigned | 
+--------------------+------------------+ 

एक छोटे बच्चे के पास कई खिलौने हो सकते हैं। एक छोटा बच्चा कई खेलों में एक साथ में भाग ले सकता है।

मुझे एक प्रश्न चाहिए जो मुझे खिलौनों की कुल संख्या + गेम देगा जिसमें थोड़ा_किड शामिल है।

 
SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900; 
SELECT COUNT(*) from Games WHERE little_kid1 = 900 
           OR little_kid2 = 900 
           OR little_kid3 = 900; 

यह एक एकल SQL क्वेरी में इसे पाने के लिए संभव है:

असल में, मैं इन दो प्रश्नों का योग करना चाहते हैं? जाहिर है, मैं उन्हें प्रोग्रामेटिक रूप से जोड़ सकता हूं, लेकिन यह कम वांछनीय है।

(मुझे लगता है कि काल्पनिक उदाहरण स्कीमा नज़र ineffecient बनाता है मान लेते हैं कि हम स्कीमा को बदल नहीं सकते हैं।।)

उत्तर

86

उन्हें लपेटें और सबक्वेरी का उपयोग करें:

SELECT 
(SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900)+ 
(SELECT COUNT(*) from Games WHERE little_kid1 = 900 
           OR little_kid2 = 900 
           OR little_kid3 = 900) 
AS SumCount 

देखा!

+0

चीयर्स! मुझे पता था कि ऐसा कुछ आसान होना था। – Runcible

+0

हम उप-क्वेरी –

+0

के बिना इसे कैसे प्राप्त कर सकते हैं आपने अपना दिन बचाया। धन्यवाद। –

5
SELECT COUNT(1) FROM 
(
    SELECT 1 FROM Toys WHERE little_kid_id = 900 
    UNION 
    SELECT 1 FROM Games WHERE little_kid1 = 900 
         OR little_kid2 = 900 
         OR little_kid3 = 900 
) 
4

कितना इस क्वेरी चलाने होने की संभावना है और पर निर्भर करता है कि कितनी बार डेटा आप समय-समय पर इस तरह के किसी समग्र तालिका में डेटा डाल सकता है परिवर्तन:

CREATE TABLE aggregated (
    little_kid_id INT UNSIGNED, 
    games_count INT UNSIGNED, 
    toys_count INT UNSIGNED, 
    PRIMARY KEY (little_kid_id) 
); 

प्रदर्शन बुद्धिमान है कि रों पहुंच सकते हैं * * गर्म तेज़ और किसी भी उप-प्रश्न से बचाता है।

3

इस एक का प्रयास करें ...

db: mysql 

SELECT SUM(dum.tab) AS total FROM (
SELECT COUNT(b.category_id) AS tab FROM tblcategory AS b WHERE b.category_id=1 
UNION ALL 
SELECT COUNT(a.category_id) AS tab FROM tblcategory AS a WHERE a.category_id=2 
) AS dum 
0
SELECT M.*,M.TOYSCOUNT+M.GAMECOUNT 
FROM (
    (SELECT COUNT(*) FROM Toys WHERE little_kid_id) AS TOYSCOUNT, 
    (SELECT COUNT(*) from Games WHERE little_kid1 = 900 OR little_kid2 = 900 OR little_kid3 = 900) AS GAMECOUNT 
    ) M 
0
SELECT 
((SELECT COUNT(*) FROM Toys WHERE little_kid_id = 900)+ 
(SELECT COUNT(*) from Games WHERE little_kid1 = 900 
           OR little_kid2 = 900 
           OR little_kid3 = 900)) 
AS Sum FROM DUAL; 
+0

कृपया अपने उत्तर में विवरण प्रदान करें। – MKR

संबंधित मुद्दे