2010-01-13 26 views
7

मुझे एसक्यूएल में उपनाम के बारे में कोई संदेह और प्रश्न है। अगर मैं उसी प्रश्न में उपनाम का उपयोग करना चाहता हूं तो क्या मैं इसका उपयोग कर सकता हूं। उदाहरण के लिए: स्तंभ ए और बी के साथ विचार करें तालिका नाम xyzक्वेरी में उपनाम का उपयोग करके और इसका उपयोग

select (a/b) as temp , temp/5 from xyz 

किसी तरह से यह संभव है?

उत्तर

8

आप किसी क्वेरी में अभिव्यक्ति के लिए पहचानकर्ता देने और फिर क्वेरी के अन्य हिस्सों में उस पहचानकर्ता का पुन: उपयोग करने के बारे में बात कर रहे हैं?

माइक्रोसॉफ्ट एसक्यूएल सर्वर में यह संभव नहीं है जो लगभग सभी SQL अनुभव तक सीमित है। लेकिन आप हालांकि निम्नलिखित कर सकते हैं।

SELECT temp, temp/5 
FROM (
    SELECT (a/b) AS temp 
    FROM xyz 
) AS T1 

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

एमएसएसक्यूएल में आपके पास तालिका स्कीमा में निर्दिष्ट गणना किए गए कॉलम बनाने का विकल्प भी है और क्वेरी में नहीं।

+0

+1। अच्छी बात। – Guru

-1

आपको अच्छी मदद के लिए W3Schools "SQL Alias" मिल सकता है।

SELECT po.OrderID, p.LastName, p.FirstName 
FROM Persons AS p, 
Product_Orders AS po 
WHERE p.LastName='Hansen' AND p.FirstName='Ola' 

, क्वेरी में आगे उर्फ ​​का उपयोग कर डेटाबेस का उपयोग कर रहे यह संभव हो सकता है पर निर्भर करता है के बारे में:

यहाँ उनके ट्यूटोरियल से एक उदाहरण है।

2

उसी SELECT खंड में संभव नहीं है, मान लें कि आपका SQL उत्पाद प्रवेश स्तर मानक SQL-92 के अनुरूप है।

SELECT खंड में अभिव्यक्तियां (और उनके सहसंबंध नाम) अस्तित्व में 'सभी एक बार' अस्तित्व में आती हैं; वहां कोई बाएं-से-सही मूल्यांकन नहीं है जिसके लिए आप उम्मीद करते हैं।

@ जोश आइंस्टीन के उत्तर के अनुसार, आप एक व्युत्पन्न तालिका का उपयोग वर्कअराउंड के रूप में कर सकते हैं (उम्मीद है कि 'temp' से अर्थपूर्ण नाम का उपयोग करके और temp/5 अभिव्यक्ति के लिए एक प्रदान करना - उस व्यक्ति को ध्यान में रखें जो आपके वारिस करेगा कोड)।

ध्यान दें कि आपके द्वारा पोस्ट किया गया कोड एमएस एक्सेस डेटाबेस इंजन पर काम करेगा (और आपकी दूसरी अभिव्यक्ति में Expr1 जैसे अर्थहीन सहसंबंध नाम असाइन करेगा) लेकिन फिर यह वास्तविक SQL उत्पाद नहीं है।

5

आप ओरेकल with कथन का भी उपयोग कर सकते हैं। अन्य डीबी में भी इसी तरह के बयान उपलब्ध हैं। ओरेकल के लिए हम यहां उपयोग करते हैं।

with t 
as (select a/b as temp 
from xyz) 
select temp, temp/5 
from t 
/

यह विशेष रूप से अगर आपके पास कई नेस्टेड प्रश्नों को शामिल एक जटिल प्रश्न हैं, क्योंकि the WITH statement केवल एक बार का मूल्यांकन किया और बाद में बयान में प्रयोग किया जाता है एक प्रदर्शन लाभ दिया है,।

1

इसकी संभव मुझे लगता है:

SELECT (A/B) as temp, (temp/5) 
FROM xyz, 
(SELECT numerator_field as A, Denominator_field as B FROM xyz), 
(SELECT (numerator_field/denominator_field) as temp FROM xyz); 
संबंधित मुद्दे