2012-03-01 14 views
13

क्या MySQL में शामिल होने के लिए उपयोग करने के लिए एक इनलाइन तालिका बनाने का कोई तरीका है?MySQL: चयन कथन के भीतर इनलाइन तालिका बनाएं?

कुछ की तरह:

SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT 

कि उत्पादन होगा

| ID | CONTENT | 
| LONG | VARCHAR(1)| 
+------+-----------+ 
| 1 | 'a' | 
| 2 | 'b' | 
| 3 | 'c' | 

और है कि मैं में इस्तेमाल कर सकते हैं एक इस तरह शामिल हो:

SELECT 
    MyTable.*, 
    MyInlineTable.CONTENT 
FROM 
    MyTable 
    JOIN 
    (SELECT LONG [1,2,3] as ID, VARCHAR(1) ['a','b','c'] as CONTENT MyInlineTable) 
    ON MyTable.ID = MyInlineTable.ID 

मुझे लगता है कि मैं क्या कर सकते हैं

SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' 

लेकिन वह बहुत बुराई

मैं एक संग्रहीत प्रक्रिया है क्योंकि संभवतः एक, ख, ग, प्रत्येक क्वेरी और डेटा के आकार में रूप में अच्छी तरह से बदल सकते हैं नहीं करना चाहती है। डेटाबेस में भी संग्रहीत प्रक्रिया को सहेजने की आवश्यकता है, और मैं इसके लिए डेटाबेस को संशोधित नहीं करना चाहता हूं। देखें वही बात है।

जो मैं वास्तव में खोज रहा हूं वह ऐसा कुछ है जो SELECT 1,'a' UNION SELECT 2,'b' UNION SELECT 3,'c' को एक अच्छे सिंटैक्स के साथ करता है।

+0

स्पष्ट उपयोग मामलों के साथ एक सीधी अवधारणा की तरह लगता है। मुझे ऐसा कुछ भी ढूंढना है। –

+0

क्या आपको कोई समाधान मिला है? मैं उत्सुक हूँ –

+0

@ फ़र्नान्डोकार्वाहोसा: नहीं, ऐसा लगता है कि यह संघ के बिना नहीं किया जा सकता –

उत्तर

-1

हां। stored procedures या views के साथ करें।

+0

है, तो यह देखने के लिए आपको सलाह देता है कि यह मेरे लिए बहुत भारी समाधान जैसा लगता है ... (प्रश्न में संपादन देखें) –

4

अब मुझे याद रखने का एकमात्र तरीका UNION का उपयोग कर रहा है या TEMPORARY TABLE बना रहा है और उन मानों को इसमें शामिल कर रहा है। क्या यहा आप पे जचता हैं?


TEMPORARY_TABLE (परीक्षण किया है और यह काम करता है):

निर्माण:

CREATE TEMPORARY TABLE MyInlineTable (id LONG, content VARCHAR(1)); 

INSERT INTO MyInlineTable VALUES 
(1, 'a'), 
(2, 'b'), 
(3, 'c'); 

उपयोग:

SELECT 
    MyTable.*, 
    MyInlineTable.CONTENT 
FROM 
    MyTable 
    JOIN 
    SELECT * FROM MyInlineTable; 
    ON MyTable.ID = MyInlineTable.ID 

TEMPORARY_TABLESजीवन(reference):

:

अस्थायी तालिकाओं स्वचालित रूप से हटा दिया जाता है जब वे क्षेत्र से बाहर जाना है, जब तक कि वे पहले से ही किया गया है स्पष्ट रूप से ड्रॉप तालिका का उपयोग कर गिरा दिया।

अन्य सभी स्थानीय अस्थायी सारणी वर्तमान सत्र के अंत में स्वचालित रूप से गिरा दी जाती हैं।

वैश्विक अस्थायी तालिकाओं को स्वचालित रूप से तब गिरा दिया जाता है जब तालिका समाप्त होती है और अन्य सभी कार्यों ने उन्हें संदर्भित करना बंद कर दिया है।किसी कार्य और तालिका के बीच संबंध केवल एक ट्रांजैक्ट-एसक्यूएल कथन के जीवन के लिए बनाए रखा जाता है। इसका मतलब है कि आखिरी ट्रांजैक्ट-एसक्यूएल स्टेटमेंट के पूरा होने पर एक वैश्विक अस्थायी तालिका गिरा दी गई है जो निर्माण सत्र समाप्त होने पर तालिका को सक्रिय रूप से संदर्भित कर रहा था।

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