PDA

View Full Version : شرط گذاري روي فيلدهاي تركيبي



m0rteza
دوشنبه 06 اردیبهشت 1389, 18:36 عصر
سلام
در كوئري زير:

SELECT Year+'/'+Month+'/'+Day AS Date From Tbl_Sampleهمانطور كه مشاهده ميشه با استفاه از AS يك فيلد جديد بوجود آماده . حالا سوال بنده اين است كه چرا نمي شود بر روي Date ( و فيلد هاي شبيه اين كه با AS درست مي شن ) در قسمت Where شرط قرار دهيم ؟
و چطور مي توان اين شرط گذاري را انجام داد؟
ممنون

محمد سلیم آبادی
دوشنبه 06 اردیبهشت 1389, 19:00 عصر
این مساله به ترتیب اجرای ماده های عبارت SELECT بر می گرد.
از نظر منطقی یک query به اساس یک ترتیب خاصی اجرا میشود. اولین مرحله ضرب دکارتی، دوم فیلتر شدن سطرها در شرط اتصال، سپس اضافه شدن سطرهای خارجی (در صورتی که از انواع اتصال خارجی مثل left استفاده کرده باشین) و بعد فیلتر سطرها در ماده ی WHERE و ...
در هر مرحله یک جدول مجازی تشکیل می شود. و چون ماده ی SELECT بعد از ماده ی WHERE اجرا می شود پس بدیهی است که این نام مستعار هنوز ایجاد نشده است تا بتوان از آن استفاده کرد.

راه حل این مشکل این است که از عبارت های جدولی مثل CTE یا Derived table استفاده کنید.
بطور مثال:




SELECT * FROM
(
SELECT Year+'/'+Month+'/'+Day AS Date From Tbl_Sample
) D
WHERE Date...