2012-07-13 12 views
17

के लिए मैं की तरहएसक्यूएल उर्फ ​​SELECT कथन

(SELECT ... FROM ...) AS my_select 
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name) 

कुछ करना चाहते हैं क्या यह संभव है किसी भी तरह "जैसा my_select" भाग करने के लिए (अर्थात एक SELECT कथन को किसी अन्य नाम आवंटित)?

(नोट:।। यह एक सैद्धांतिक सवाल यह है कि मुझे लगता है कि मैं इसे एक SELECT कथन को किसी अन्य नाम आवंटित बिना कर सकते हैं, लेकिन मैं जानना चाहता हूँ कि मैं उस के साथ यह कर सकते हैं चाहते हैं)

+0

क्या इनमें से कोई भी जवाब संतोषजनक था? यदि आप इसे उत्तर देने पर विचार करते हैं तो कृपया एक पर निशान लगाएं। सामान्य तालिका अभिव्यक्तियों के लिए –

उत्तर

28

सुनिश्चित नहीं हैं कि में केवल एक ही कॉलम चुन सकते हैं कि वास्तव में क्या आपको लगता है कि वाक्य रचना के साथ निरूपित करने के लिए प्रयास करते हैं, लेकिन लगभग सभी में आरडीबीएमएस-एस आप एक सबक्वेरी में FROM खंड का उपयोग कर सकते हैं (कभी कभी एक बुलाया " इनलाइन-व्यू "):

SELECT.. 
FROM (
    SELECT ... 
    FROM ... 
    ) my_select 
WHERE ... 

उन्नत "उद्यम" में आरडीबीएमएस-एस आप जो आपको नाम एक प्रश्न का उल्लेख और यहां तक ​​कि कई बार यह पुनः उपयोग कर सकते आम तालिका एक्सप्रेशन का उपयोग कर सकते हैं (ओरेकल, एसक्यूएल सर्वर, PostgreSQL की तरह):

-- Define the CTE expression name and column list. 
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear) 
AS 
-- Define the CTE query. 
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
) 
-- Define the outer query referencing the CTE name. 
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear 
FROM Sales_CTE 
GROUP BY SalesYear, SalesPersonID 
ORDER BY SalesPersonID, SalesYear; 

(http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx से उदाहरण)

+1

+1। – Josien

0

हाँ, लेकिन आप अपने सबसिलेक्ट

SELECT (SELECT id FROM bla) AS my_select FROM bla2 
3

आप इस SELECT कथन के खंड के साथ उपयोग कर सकते हैं:

; 
WITH my_select As (SELECT ... FROM ...) 
SELECT * FROM foo 
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name) 

एएनएसआई/आईएसओ एसक्यूएल सिंटेक्स है यही कारण है कि। मुझे पता है कि एसक्यूएल सर्वर, ओरेकल और डीबी 2 इसका समर्थन करते हैं। दूसरों के बारे में निश्चित नहीं है ...

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