PDA

View Full Version : مشكل در پياده سازي "همه"



masoud.a
شنبه 24 اردیبهشت 1390, 20:53 عصر
با سلام،يه سوال داشتم:
وقتي ميخوام بگم دانشجوياني كه نمره كمتر از 12 ندارند از چه كوئري بايد استفاده كنيم؟يعني ميخوام بگم: همه نمراتشون بيشتر از 12

محمد سلیم آبادی
شنبه 24 اردیبهشت 1390, 21:30 عصر
سلام،
فرض کن 2 جدول وجود داره دانشجو( Students-std_nbr PK) و نمرات (Test):

SELECT *
FROM Students S
WHERE NOT EXISTS
(SELECT *
FROM Tests
WHERE std_nbr = S.std_nbr
AND grade < 12);

masoud.a
شنبه 24 اردیبهشت 1390, 23:41 عصر
ممنون از كمكتون.:تشویق::لبخندساده:

Rejnev
یک شنبه 25 اردیبهشت 1390, 00:19 صبح
select
student.*
from
student, test
where
student.id = test.id and
test.nomre>12

محمد، به نظرت اگه این کارو بکنیم بهتر نیست؟
من از اجرای کوئری ها و بهینه کردن خودکارشون توسط اس کیو ال تقریبا هیچی نمیدونم(optimization هم در حد صفر بلدم)، اما فکر میکنم روش شما به ازای هر دانشجو که در سلکت اول خونده میشه، سلکت دوم رو هم میزنه. هرچند سلکت دوم هزینش پایینه.
من اگه باشم اول یک ویو از نمره و شماره دانشجو (test) که نمرش بالای 15 هست از جدول نمرات ایجاد میکنم و بعد با دانشجو join میکنمش.

محمد سلیم آبادی
یک شنبه 25 اردیبهشت 1390, 01:33 صبح
این کدی که قرار دادی نتیجه ی مورد نظر رو تولید کنه چون از لحاظ منطقی مساله رو حل نمیکنه.
کوئری میگه که، انتخاب کن سطرهای از جدول Tests رو که نمرشون بالای 12 است. ولی خواسته کاربر بدست آوردن دانشجویانی هست که نمره ی کمتر از 12 نداشته اند.

در کوئری زیر دیگه از کوئری وابسته خبری نیست.

SELECT S.std_nbr
FROM Students S
JOIN Tests T
ON std_nbr = S.std_nbr
GROUP BY S.std_nbr
HAVING MAX(CASE WHEN grade < 12 THEN 1 ELSE 0 END) = 0;