PDA

View Full Version : حرفه ای: راهنمایی در حل یک کوئری به ظاهر ساده!



Rejnev
شنبه 31 خرداد 1393, 23:08 عصر
سلام
جدول کلید/مقدار زیر رو در نظر بگیرید:


key
val


علی
مرد


رضا
مرد


زهره
زن


فاطمه
زن


علی
لیسانس


علی
کارمند


رضا
لیسانس


زهره
کارمند


فاطمه
فوق دیپلم



فرض کنید میخوایم کوئری ای بگیریم که "زنان لیسانسه" رو در خروجی بیاره...
(ترجیحا کوئری ای باشه که امکان افزودن شرط های بیشتر رو هم داشته باشه)
برای حلش چه پیشنهادی میکنید؟
ممنون

Rejnev
یک شنبه 01 تیر 1393, 10:01 صبح
فکر میکنم جواب یک چیزی تو این مایه ها میشه:

select * from tbl
where val in
(
select 'female' union select 'BA' --,...
)


ویرایش:
این کوئری ج نمیده و بصورت or عمل میکنه که خروجی مورد نظر رو نمیده

pezhvakco
یک شنبه 01 تیر 1393, 11:27 صبح
سلام
یه امتحان داشته باشین

Declare @Jens NVarChar(50);
Declare @Madrak NVarChar(50);

SET @Jens = 'زن';
SET @Madrak = 'لیسانس'

SELECT key_c
,(select val_c FROM Table_1 AS Tb02 where (val_c = @Jens) and (tb01.key_c = tb02.key_c)) as Sex
,(select val_c FROM Table_1 AS Tb02 where (val_c = @Madrak) and (tb01.key_c = tb02.key_c)) as Madrak
FROM Table_1 AS Tb01
where (val_c = @Jens) and
(key_c in (SELECT[key_c]
FROM Table_1
where val_c = @Madrak))

Rejnev
یک شنبه 01 تیر 1393, 18:37 عصر
pezhvakco (http://barnamenevis.org/member.php?59994-pezhvakco) عزیز
دقیقا پاسخ شما جواب میده.
خیلی ممنون.
من به این کوئری تغییرش دادم:



SELECT distinct k
FROM keyval
where
(k in (SELECT k FROM keyval where val = 'female'))
and
(k in (SELECT k FROM keyval where val = 'lic'))

marjan_gh
دوشنبه 02 تیر 1393, 09:56 صبح
من یه سوال برام ایجاد شده!
نوشتن جدول به این شکل اصولی هست؟ اگه هست پس نرمال سازی کجا قرار می گیره؟
منو یاد دیکشنری میندازه ولی توی دیکشنری هم ما یه مقدار برای یه کلید در نظر می گیریم اینطوری نیست؟؟

Rejnev
دوشنبه 02 تیر 1393, 18:45 عصر
من یه سوال برام ایجاد شده!
نوشتن جدول به این شکل اصولی هست؟ اگه هست پس نرمال سازی کجا قرار می گیره؟
منو یاد دیکشنری میندازه ولی توی دیکشنری هم ما یه مقدار برای یه کلید در نظر می گیریم اینطوری نیست؟؟
سلام.
خیر، زیاد اصولی نیست. نرمال سازی هم در نظر گرفته نشده.
این جدول رو برای مثال نوشتم.
حقیقت امر اینه که من با یک جدول مشابه که توی یک دیتابیس واقعی ایجاد شده بود مواجه شدم و می بایست فقط کوئری میگرفتم (نه نرمال سازی و زیر سوال بردن دیزاین). و از هر طریقی که امتحان کردم به جواب نرسیدم. این شد که توی انجمن پست گذاشتم...

از این جور جداول برای ذخیره سازی اطلاعاتی مثل خصوصیات استفاده میشه. مثلا سایت DigiKala رو در نظر بگیرین که میتونه برای هر محصول گروه خاصی رو مشخص کنه و هر گروه هم لیست خصوصیات مشخصی داره. حالا توی یک جدول دیگه میان میگن کالای x ، خصوصیت مثلا حافظه رم = 1گیگ داره. (1 گیگ هم میتونه توی یک جدول دیگه به عنوان یکی از مقادیر ممکن برای خصوصیت "حجم حافظه" بصورت ثابت تعریف بشه)
یکم پیچیده شد نه؟!
حالا وقتی توی سرچ دی جی کالا میریم، با مشخص کردن هر خصوصیت محصولات فیلتر میشن که امکان خیلی جالبیه و البته پیاده سازی سختی داره.