2010-03-03 11 views
8

मैं कैसे एक क्वेरी में इन दोनों का चयन करें कथनों को संयोजित करते हैं:मैं कैसे एक SELECT कथन में इन एसक्यूएल का चयन प्रश्नों कम्बाइन करते

SELECT SUM(incidents) AS fires, neighborhoods AS fire_neighborhoods 
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location` 
UNION ALL SELECT * 
FROM `fires_2007_incident_location` 
UNION ALL SELECT * 
FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 



SELECT SUM(incidents) AS adw, neighborhoods AS adw_neighborhoods 
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location` 
UNION ALL SELECT * 
FROM `adw_2007_incident_location` 
UNION ALL SELECT * 
FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC 

तो, मैं चाहता हूँ क्वेरी वापस जाने के लिए, कुछ की तरह:

fire_neighborhoods fires adw_neighborhoods adw 
xyzNeighborhood  6  abcNeighborhood 22 
jklNeighborhood  3  tuvNeighborhood 40 

मैं बस ऊपर दिए गए दो प्रश्नों के परिणामों को जोड़ना चाहता हूं। दो प्रश्न एक-दूसरे से स्वतंत्र हैं। किसी के परिणाम अन्य क्वेरी के परिणामों को प्रभावित नहीं करते हैं। मुझे बस दो परिणामों को एक साथ स्लैम करने का एक तरीका चाहिए।

यदि किसी के पास कोई सलाह है, तो कृपया मुझे बताएं।

धन्यवाद।

-Laxmidi

+0

मुझे कुछ याद आना चाहिए। आप सिर्फ दो प्रश्नों को एक साथ क्यों नहीं जोड़ सकते? –

+0

क्या आप अपनी टेबल की संरचना पोस्ट कर सकते हैं? – shoover

+2

और लोग इस प्रश्न को क्यों वोट दे रहे हैं? क्या यह सवाल वास्तव में उपयोगी है? यह मेरे लिए अकादमिक और अनिवार्य लगता है। –

उत्तर

1

इसे समझने में सहायता के लिए धन्यवाद। डेविड हॉल, हारून, जेफरी व्हिटलेज & NYSystems विश्लेषक के लिए चिल्लाओ। मैं डमी कॉलम विकल्प के साथ गया:

SELECT SUM(incidents) , neighborhoods, 'adw' as offense 
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location` 
UNION ALL SELECT * 
FROM `adw_2007_incident_location` 
UNION ALL SELECT * 
FROM `adw_2006_incident_location` 
) AS combo 
GROUP BY neighborhoods 
UNION ALL 
SELECT SUM(incidents), neighborhoods, 'fire' as offense 
FROM (
SELECT * 
FROM `fire_2009_incident_location` 
UNION ALL SELECT * 
FROM `fire_2008_incident_location` 
UNION ALL SELECT * 
FROM `fire_2007_incident_location` 
UNION ALL SELECT * 
FROM `fire_2006_incident_location` 
) AS combo2 
GROUP BY neighborhoods 
2

तो मैं समझता हूँ कि क्या आप सही तरीके से की जरूरत है, तो आप यूनिअन क्वेरी को एकसाथ, एक कॉलम शामिल क्या आप जानते हैं जो क्वेरी यह आया जाने के लिए कर सकते हैं से:

SELECT SUM(incidents) AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'Fires' as which_query 
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location` 
UNION ALL SELECT * 
FROM `fires_2007_incident_location` 
UNION ALL SELECT * 
FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 

UNION 

SELECT SUM(incidents) AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'ADW' as which_query 
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location` 
UNION ALL SELECT * 
FROM `adw_2007_incident_location` 
UNION ALL SELECT * 
FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC 

दी आप होगा दो बार जितनी पंक्तियां और आधा आपका डेटा शून्य हो जाएगा, लेकिन परिणामों को एक साथ "स्लैमिंग" करना आपके उदाहरण में सामान्य नहीं है।

+0

हाय हारून, मुझे लगता है कि मुझे डेटा को क्षैतिज रूप से वापस करने की आवश्यकता नहीं है। मैं एक कॉलम जोड़ सकता हूं जो इंगित करेगा कि यह आग या एडव है या फिर अन्य कॉलम पड़ोस और घटनाएं हैं। -लैक्समिडी – Laxmidi

+0

हाय हारून, मैं अपने पिछले संदेश में "धन्यवाद" कहने के लिए भूल गया। क्षमा करें। -लैक्समिडी – Laxmidi

3

आपके द्वारा दिया गया उदाहरण इंगित करता है कि आप क्षैतिज प्रश्नों को गठबंधन करना चाहते हैं, लेकिन फिर आपने बाद में कहा कि वे पूरी तरह से स्वतंत्र हैं। ये विवादित बयान हैं क्योंकि जब आप एक-दूसरे से संबंधित होते हैं तो आप आम तौर पर क्षैतिज डेटा जोड़ते हैं। नीचे क्षैतिज रूप से संयोजन के लिए मेरा विचार नीचे है, लेकिन मैं उनके विचार को उनके नीचे लंबवत संयोजन के लिए भी ध्यान देता हूं।

यह निर्भर करता है कि आप उन्हें कैसे लिंक करना चाहते हैं। यह एक उदाहरण मात्र है

SELECT fire_neighborhoods, fires, adw 
FROM (

SELECT SUM(incidents) AS fires, neighborhoods AS fire_neighborhoods 
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location` 
UNION ALL SELECT * 
FROM `fires_2007_incident_location` 
UNION ALL SELECT * 
FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 

) AS fires 
    INNER JOIN ( 

SELECT SUM(incidents) AS adw, neighborhoods AS adw_neighborhoods 
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location` 
UNION ALL SELECT * 
FROM `adw_2007_incident_location` 
UNION ALL SELECT * 
FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC 

) AS adw 
    ON fires.fire_neighborhoods = adw.adw_neighborhoods 

: आप पड़ोस के आधार पर में जानना चाहते हैं, तो आप एक पर इस तरह के रूप fire_neighborhoods = adw_neighborhoods, दो बड़े प्रश्नों के बीच में शामिल होने के लिए कर सकते हैं। इसे आपके लिए काम करने के लिए आपको एक अलग शामिल होने या कुछ की आवश्यकता हो सकती है।

अब, आपने कहा है कि दो प्रश्न स्वतंत्र हैं और एक-दूसरे को प्रभावित नहीं करते हैं। यदि उनके पास वास्तव में कोई सामान्य आधार नहीं है, तो आपको प्रत्येक क्वेरी में एक कॉलम जोड़ना चाहिए जो इंगित करता है कि क्वेरी से यह संकेत मिलता है (उदाहरण के लिए अग्नि क्वेरी के लिए 1 के निरंतर मान वाले कॉलम और विज्ञापन के लिए 2 के निरंतर मूल्य वाला कॉलम जोड़ें क्वेरी)। फिर, यूनियन दो बड़े प्रश्नों को एक साथ मिलाएं। क्षैतिज फैशन के विपरीत यह उन्हें एक ऊर्ध्वाधर फैशन में जोड़ देगा।

+0

हाय NYSystems विश्लेषक, स्थिरांक वाले कॉलम जोड़ने के सुझाव के लिए धन्यवाद। मैं शायद ऐसा करूँगा। -लैक्समिडी – Laxmidi

1

जवाब आप के बाद क्या कर रहे हैं, लेकिन सिर्फ मामले में, यह यूनियनों को डमी स्थान धारक स्तंभ जोड़ने के रूप में नीचे दिखाया गया है संभव है की तरह एक discriminator स्तंभ नज़र का उपयोग कर के दूसरों के द्वारा दिए गए:

SELECT 
    SUM(incidents) AS fires, 
    neighborhoods AS fire_neighborhoods, 
    0 as adw, 
    '' as adw_neighbourhoods 
FROM ( 
    SELECT * 
    FROM `fires_2009_incident_location` 
    UNION ALL SELECT * 
    FROM `fires_2008_incident_location` 
    UNION ALL SELECT * 
    FROM `fires_2007_incident_location` 
    UNION ALL SELECT * 
    FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 

UNION 

SELECT 
    0 as fires, 
    '' as fire_neighbourhoods, 
    SUM(incidents) AS adw, 
    neighborhoods AS adw_neighborhoods 
FROM ( 
    SELECT * 
    FROM `adw_2009_incident_location` 
    UNION ALL SELECT * 
    FROM `adw_2008_incident_location` 
    UNION ALL SELECT * 
    FROM `adw_2007_incident_location` 
    UNION ALL SELECT * 
    FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC 
+0

हाय डेविड, संदेश के लिए धन्यवाद। मैंने आपके सुझाव की कोशिश की और दुर्भाग्य से, मैं इसे काम नहीं कर सका। क्या MySQL में डमी कॉलम जोड़ना संभव है? -Laxmidi – Laxmidi

+0

@Laxmidi - क्या आप उस वाक्यविन्यास को चलाने पर त्रुटि देख रहे हैं? मुझे mySQL के बारे में निश्चित नहीं है, हालांकि मुझे उम्मीद है कि इसे काम करना चाहिए। किसी के द्वारा टूर प्रश्न को टीक्यूएल के रूप में पुनः प्राप्त किया गया था जो कि माइक्रोसॉफ्ट एसक्यूएल कार्यान्वयन है, मैं अब इसे फिर से हासिल करने जा रहा हूं। –

0

प्रदर्शित दो असंबद्ध प्रश्न साइड-बाय-साइड आमतौर पर एसक्यूएल इंजन की बजाय रिपोर्टिंग सॉफ्टवेयर का काम होता है। यहां समस्या यह है कि आप क्वेरी टूल से कुछ ऐसा करने के लिए कह रहे हैं जो यह करने के लिए उपयुक्त नहीं है: स्वरूपण प्रदर्शित करें।

एक संबंध (जो कि चयन का परिणाम मूल रूप से माना जाता है) एक डेटा संरचना है जो दुनिया की स्थिति के बारे में दावा करता है। प्रत्येक पंक्ति प्रस्तावों की एक श्रृंखला को परिभाषित करती है जो (आदर्श) सत्य हैं।

आपके प्रश्न में, पंक्तियों में तथ्यों की मनमानी संगतताएं होती हैं जो एक-दूसरे से संबंधित नहीं होतीं और जिसके बारे में कोई प्रस्ताव नहीं कहा जा सकता है।

+0

हाय जेफरी, आप सही हैं। डेटा क्षैतिज रूप से वापस करने के लिए समझ में नहीं आता है। धन्यवाद -लैक्समिडी – Laxmidi