इसका संबंध इस बात से है कि SQL dbms अस्पष्ट नामों का समाधान कैसे करता है।
मैंने अभी तक इस व्यवहार को SQL मानकों में ट्रैक नहीं किया है, लेकिन ऐसा लगता है कि यह सभी प्लेटफार्मों पर संगत है। यहाँ क्या हो रहा है।
create table test (
col_1 integer,
col_2 integer
);
insert into test (col_1, col_2) values
(1, 3),
(2, 2),
(3, 1);
उपनाम "col_1" को "col_2" के रूप में, और ORDER BY खंड में उपनाम का उपयोग करें। dbms ORDER BY में "col_1" के उपनाम के रूप में "col_2" को हल करता है, और "test"."col_1" में मानों के अनुसार क्रमबद्ध करता है।
select col_1 as col_2
from test
order by col_2;
col_2 -- 1 2 3
फिर से, उपनाम "col_1" को "col_2" के रूप में, लेकिन ORDER BY खंड में एक अभिव्यक्ति का उपयोग करें। dbms "col_2" का समाधान करता है नहीं "col_1" के लिए एक उपनाम के रूप में, लेकिन "परीक्षण" कॉलम के रूप में। col_2"। यह "test"."col_2" में मानों के अनुसार क्रमित करता है।
select col_1 as col_2
from test
order by (col_2 || '');
col_2 -- 3 2 1
तो आपके मामले में, आपकी क्वेरी विफल हो जाती है क्योंकि डीबीएमएस अभिव्यक्ति में "न्यूवैल्यू" को आधार तालिका में कॉलम नाम के रूप में हल करना चाहता है। लेकिन ऐसा नहीं है; यह एक कॉलम उपनाम है।
पोस्टग्रेएसक्यूएल
यह व्यवहार PostgreSQL में पंक्तियों को क्रमित करना अनुभाग में प्रलेखित है। . उनका घोषित तर्क अस्पष्टता को कम करना है।
SELECT a + b AS sum, c FROM table1 ORDER BY sum + c; -- wrong
SQL Server 2008 में दस्तावेज़ीकरण त्रुटि
ए थोड़ा ORDER में उपनामों के संबंध में भिन्न समस्या खंड द्वारा ।
जब तक मैं अपर्याप्त रूप से कैफीनयुक्त नहीं हूँ, यह बिल्कुल भी सच नहीं है। यह कथन SQL Server 2008 और SQL Server 2012 दोनों में "test"."col_1" के अनुसार क्रमित करता है।
select col_1 as col_2
from test
order by col_1;