এসকিউএলে, যতদূর আমি জানি, লজিক্যাল ক্যোয়ারী প্রসেসিং অর্ডার, যা ধারণাগত ব্যাখ্যার আদেশ, নিম্নলিখিত পদ্ধতিতে FROM দিয়ে শুরু হয়:
- থেকে
- কোথায়
- গ্রুপ দ্বারা
- উপস্থাপন করে আমরা সহজেই
- নির্বাচন
- অর্ডার দ্বারা
এই তালিকাটি অনুসরণ করা আপনার কেন সহজে একটি দফায় নির্বাচনী এলিয়াস রাখতে পারবেন না তা সহজেই দেখা যায়, কারণ উপনামটি এখনও তৈরি হয়নি। টি-এসকিউএল (এসকিউএল সার্ভার) এটিকে কঠোরভাবে অনুসরণ করে এবং আপনি নির্বাচন না করে অবধি নির্বাচিত উপকরণ ব্যবহার করতে পারবেন না।
তবে মাইএসকিউএলে এইচওভিং ধারাটিতে সিলিক্ট এলিয়াস ব্যবহার করা সম্ভব যদিও সেলেক্ট ক্লজের আগে এটি (যৌক্তিকভাবে) প্রক্রিয়া করা উচিত। এটি কীভাবে সম্ভব?
একটি উদাহরণ দিতে:
SELECT YEAR(orderdate), COUNT(*) as Amount
FROM Sales.Orders
GROUP BY YEAR(orderdate)
HAVING Amount>1;
টি-এসকিউএল-তে বিবৃতিটি অবৈধ (কারণ হ'ল নির্বাচনী উলেফ উল্লেখ করা হচ্ছে Amount
) ...
Msg 207, Level 16, State 1, Line 5
Invalid column name 'Amount'.
... তবে মাইএসকিউএলে ঠিক কাজ করে।
এর ভিত্তিতে আমি ভাবছি:
- মাইএসকিউএল ব্যবহারকারীকে সাহায্য করার জন্য এসকিউএল বিধিগুলিতে একটি শর্টকাট নিচ্ছে? কিছুটা প্রাক-বিশ্লেষণ ব্যবহার করে?
- বা মাইএসকিউএল আমি সমস্ত আরডিবিএমএস অনুসরণ করে থাকলেও তার চেয়ে আলাদা ধারণাগত ব্যাখ্যা সংজ্ঞা ব্যবহার করছে?
SELECT C, ROW_NUMBER() OVER (ORDER BY X) AS RN FROM T GROUP BY C HAVING RN = 1
যেমন সমস্যাযুক্ত হতে হবে ROW_NUMBER
রান পরHAVING
SELECT @rownum:=@rownum + 1 as row ...
। তারা কেবল নির্বাচনী এলিয়াসগুলিকে সমর্থন করার কারণটি হ'ল কারণ তারা পারে যে এই কারণে যে তারা এমন জিনিসগুলিকে সমর্থন করে না যা এটি অসম্ভব করে দেয় ... কে জানে? :)
HAVING
এবং SELECT
দফার জন্য কার্যকর করার যৌক্তিক ক্রমটি আদান প্রদান করা যেতে পারে। সুতরাং, এটি করার ক্ষেত্রে কোনও অস্পষ্টতা নেই এবং যখন রাক্ষস প্রকাশ হয় তখন কোডটির চেহারাটি সহজ করতে পারে SELECT
।
distincts
) উপভোগ করছে । অপ্টিমাইজারের সাথে কিছুটা ভিন্নতা ঘটছে। Alias in the Having
Explain