2011-02-09 13 views
8

ठीक है, मेरे सिर दर्द होता है ...!MySQL: इन यूनियनों को एक साथ जोड़ने के लिए

इस खूबसूरत MySQL क्वेरी:

(SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1) 
UNION 
(SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1) 
UNION 
(SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1) 

... सुंदर नंबर की तीन पंक्तियों देता है।

आदर्श रूप से, मैं यह प्रश्न सभी तीन "twitfollow" परिणामों को वापस करने के लिए चाहता हूं, एक साथ SUMmed।

हालांकि, उन्हें एक एसयूएम दौर डालने से मुझे "हर व्युत्पन्न तालिका के अपने उपनाम होना चाहिए" के बारे में एक त्रुटि मिलती है, और मैं थोड़ा हल कर रहा हूं कि इसे हल करने के तरीके के बारे में थोड़ा उलझन में है।

(बेशक, मैं बस PHP में परिणाम योग कर सकता है, लेकिन मैं यह सोचते हैं कि यह MySQL सर्वर का उपयोग कर यह करने के लिए जल्दी है मैं सही नहीं होगा।?)

उत्तर

26

FROM खंड के रूप में अपने पूरे क्वेरी का उपयोग करें एक दूसरी क्वेरी के:

SELECT SUM(twitfollow) FROM (
    (SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1) 
    UNION ALL 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1) 
    UNION ALL 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1) 
) t1 

मैं भी अपने UNIONUNION ALL के रूप में आप शायद नहीं पंक्तियों को हटाने के लिए सिर्फ इसलिए कि एक मेज से राशि एक और मेज से राशि के बराबर है चाहते हैं बदल दिया है।

SELECT SUM(twitfollow) 
FROM 
(
    (SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1) 
    UNION ALL 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1) 
    UNION ALL 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1) 
) 
+0

आह। "टी 1" चाल चल रहा है। बहुत धन्यवाद, दान। (यूनियन ऑल - हाँ, मुझे यह देखने की ज़रूरत है कि दो प्रश्न क्या लौटते हैं।) – jamescridland

+1

हाँ, आपको उस व्युत्पन्न तालिका को देना होगा जिसे आप किसी नाम से चुन रहे हैं, भले ही आप नाम का उपयोग न करें ... सभी 'टी 1' है। –

0

बस के चारों ओर एक के योग क्वेरी लपेट?

SELECT SUM(
    (SELECT mtwitterfollowers AS twitfollow FROM `media` WHERE media.id=1) 
    + 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN positions ON position_id = positions.id WHERE peoplejoin.media_id = 1) 
    + 
    (SELECT SUM(twitterfollowers) AS twitfollow FROM people LEFT JOIN peoplejoin ON peoplejoin.people_id = people.id LEFT JOIN networkjoin ON networkjoin.network_id = peoplejoin.network_id LEFT JOIN positions ON position_id = positions.id WHERE networkjoin.media_id = 1) 
) AS twitterfollowers 
+0

यही मैंने सोचा था। हालांकि, यह '# 1248' लौटाता है - प्रत्येक व्युत्पन्न तालिका में अपना स्वयं का उपनाम होना चाहिए '। – jamescridland

0

क्यों, छोटे बना नीचे की तरह नहीं:

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