PDA

View Full Version : کمک در دستور sql



omid195
جمعه 13 شهریور 1388, 08:51 صبح
سلام دوستان
من يک جدول دارم با دو فيلد يکي id که کليد است و يکي grade که نمره هايي است که هر id مي تونه داشته باشه حالا من ميخواهم ليست id هايي رو به من بدهد که نمره هايشان دقيقاً 17,18,20 باشه يعني دقيقاً هر 3 نمره شامل آن باشد و چيزي کم يا زياد نباشد با دستور
select id from student_grade where grade =all مي نويسم ولي کار نمي کند لطفا راهنمايي کنيد خيلي فورييه
ممنون

محمد سلیم آبادی
جمعه 13 شهریور 1388, 10:59 صبح
چطور ممکنه که کلید اصلی جدولت id باشد و سپس می خواهی id ای هایی را بدست آوری که نمرات 17 و 18 و 20 را گرفته اند!!!! وقتی کلید id باشد یعنی هر id یک نمره می تواند بگیرد وقتی هر id بتواند یک نمره بگیرد دیگر نمی تواند بیش از یک نمره بگیرد درنتیجه غیر ممکن است که چند نمره داشته باشد (احتمالا منظورت کلید ترکیبی است)

یک برداشت دیگر از جمله شما این است که id هایی را می خواهید که یکی از این سه نمره را دریافت کرده باشند؟!

ولی اگر منظورت برداشت اول بوده باشد (یعنی کلید ترکیبی) در نتیجه خواهیم داشت:
راههای مختلفی وجود دارد، در واقع عملی که شما می خواهید انجام دهید تقسیم دقیق یعنی exact division است (برای اطلاعات بیشتر مقاله ای با نام relational division که بنده نوشتم را می توانید مطالعه کنید، در این تالار موجود است)



declare @grade table
(
id int not null,
grade int not null,
primary key (id asc, grade desc)
)

insert into @grade
select 1,15 union all
select 1,20 union all
select 1,18 union all
select 2,20 union all
select 2,17 union all
select 2,18 union all
select 3,20 union all
select 3,18 union all
select 3,17 union all
select 3,16


select id
from @grade g
left join (select grade=17 union all
select 18 union all
select 20) d
on g.grade=d.grade
group by id
having count(*)=3 and count(d.grade)=3

omid195
جمعه 13 شهریور 1388, 16:19 عصر
چطور ممکنه که کلید اصلی جدولت id باشد و سپس می خواهی id ای هایی را بدست آوری که نمرات 17 و 18 و 20 را گرفته اند!!!! وقتی کلید id باشد یعنی هر id یک نمره می تواند بگیرد وقتی هر id بتواند یک نمره بگیرد دیگر نمی تواند بیش از یک نمره بگیرد درنتیجه غیر ممکن است که چند نمره داشته باشد (احتمالا منظورت کلید ترکیبی است)


بله منظور منهم کليد ترکيبي بود:خجالت: خيلي ممنون از راهنمائيتان کمک بزرگي به من کرديد :قلب: الان مي روم وتستش مي کنم راستي اون مقاله relational division چيزي توش نيست در هر صورت ممنون