2012-12-06 12 views
9

मैं एक बड़ी mysql डेटाबेस से क्वेरी कर रहा हूँ के साथ ही विशेषाधिकार पढ़ा है, और मैं एक चर, 'foo' के लिए कुछ धीमी गति से क्वेरी परिणाम निर्धारित करना चाहते हैं, तो मैं उन्हें अन्य प्रश्नों में फिर से उपयोग कर सकते हैं ।असाइन क्वेरी परिणाम

मूल रूप से, मैं एक बोझिल सबक्वेरी के लिए एक चर करना चाहते हैं, तो मैं यह हर बार जब मैं इसका उपयोग करना चाहते चलाने की लागत बिना इसे पुन: उपयोग कर सकते हैं।

जब मैं दर्ज करें:

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 

मैं मिलता है: त्रुटि 1241 (21000): ओपेरैंड 1 कॉलम (रों) को शामिल करना चाहिए और अगर मैं 1 कॉलम को रोकते हैं, तो त्रुटि 1242 (21000): Subquery अधिक रिटर्न 1 से पंक्ति

वहाँ किसी सरणी या एक चर में एक टेबल स्टोर करने के लिए एक तरीका है? मेरे पास अस्थायी तालिकाओं को बनाने के लिए विशेषाधिकार नहीं हैं।

उत्तर

4

यह @ जब आप MySQL में कर रहे हैं होना चाहिए। किसी भी चर में

आप नहीं कर सकते दुकान पूर्ण तालिका लेकिन आप क्वेरी के नीचे का उपयोग कर किसी भी चर में स्तंभ डेटा स्टोर कर सकते हैं:

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 
+0

धन्यवाद, लेकिन अब मैं मिलता है: त्रुटि 1241 (21000): ओपेरैंड 1 कॉलम (रों) शामिल करना चाहिए। जब मैं इसे 1 कॉलम तक सीमित करता हूं, तो मुझे मिलता है: सबक्वायरी 1 से अधिक पंक्ति देता है। – 5un5

+0

हां क्योंकि '@ foo' केवल एक मान स्टोर कर सकता है। इसलिए आपके 'चयन' कथन में, आपको निश्चित रूप से पता होना चाहिए कि यह एकल मान वापस करेगा। –

+0

आह, मैं देखता हूं। धन्यवाद। क्या किसी तालिका को स्टोर करने या एक चर में क्वेरी परिणामों के सरणी के लायक किराए पर लेने का कोई तरीका है? – 5un5

1

आप भी इस कोशिश कर सकते हैं।

SELECT GROUP_CONCAT(col1 SEPARATOR '~~~'), GROUP_CONCAT(col2 SEPARATOR '~~~'), ... INTO @foo, @foo2, ... 
FROM table1 JOIN table2 
WHERE bar = 0 
GROUP BY id; 

या

select col1, col2, ... into @foo, @foo2, ... 
from table1 join table2 
where bar = 0 
group by id 
+0

Thanks-- रास्ता बहुत अधिक डेटा इस एक काम करने के लिए, लेकिन शायद एक छोटे कार्य के लिए। – 5un5

+0

यह मददगार होगा, लेकिन मैं अभी भी त्रुटि 1172 (42000) मिलती है: परिणाम एक से अधिक पंक्तियां शामिल थे जब मैं के साथ प्रयास करें: @foo table1 जांच पीआईडी ​​का चयन पाने के लिए पीआईडी ​​ – 5un5

+0

कोशिश group_concat समारोह से तालिका 2 बार = 0 समूह में शामिल होने सभी पंक्तियों को एक चर में डेटा जैसा कि मैंने पहले ही अपने उत्तर में परिभाषित किया है। –

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