ورود

View Full Version : کوئری جوین دو جدول



SamStar
چهارشنبه 15 خرداد 1392, 17:45 عصر
من دوتا جدول دارم یکی مشخصات خریداران و یکی میزان و مشخصات خریدها

CUSTOMER
====================
ID - Name - city - tel - address


SELL
======================
ID - CustomerID - Date

میخوام یه کوئری بنویسم که مشخصات مشتریانی که از یک تاریخ مشخص به بعد خرید نداشتن رو نشون بده و همچنین آخرین تاریخ خریدشون رو

من این کوئری رو نوشتم ولی مشخصات افراد رو که نشون میده آخرین تاریخ خرید همه شون رو NULL نشون میده . مشکلش کجاس ؟


select Customer.Name ,Customer.city ,Customer.tel ,Customer.address,max(Sell.Date) as 'date' from Sell right join Customer on Sell.CustomerID = Customer.ID group by Sell.CustomerID,Customer.Name,Customer.ID ,Customer.city ,Customer.tel,Customer.address having max(Date)< '2013/03/01'

محمد سلیم آبادی
چهارشنبه 15 خرداد 1392, 18:03 عصر
سوال جالبی پرسیدین.
اینو امتحان کنید:
select d.*, t.mx as maximum
from
(
select customerId, max(date) as mx
from sell
group by customerid
)t
inner join
(
select c.*
from customer c
left outer join sell s
on c.id =s.customerid
and s.date > '2013/03/01'
where s.id is null
)d
on t.customerid = d.id

SamStar
چهارشنبه 15 خرداد 1392, 19:01 عصر
یه اشکالی هست :
اونم اینجا که نوشتین


select c.*
from customer c
left outer join sell s
on c.id =s.customerid
and s.date > '2013/03/01'
where s.id is null



اگر یک نفر چند خرید داشته باشه یکی بعد از 2013/03/01 و یکی قبلش ، اسمش رو توی لیست میاره . برای حل این مشکل باید ماکزیمم تاریخ خرید هر فرد رو با 2013/03/01 مقایسه کرد اما من بجای s.date > '2013/03/01 میزارم max(date) ارور میده!

محمد سلیم آبادی
چهارشنبه 15 خرداد 1392, 19:33 عصر
نه دوست عزیز اون تیکه کد فقط مشتریانی رو میاره که بعد از اون تاریخ خریدی نداشتن.
مشکل کجا بود که حل شد؟

SamStar
چهارشنبه 15 خرداد 1392, 20:35 عصر
هیچی درست بود . ممنون

حالا اگر بخوام کسانی که اصلا خرید نداشتن روهم نشون بده چه جوری باید بنویسم ؟ (یعنی کسانی که اسم و مشخصاتشون توی customer هست ولی ID شون توی sell نیست )

محمد سلیم آبادی
چهارشنبه 15 خرداد 1392, 23:13 عصر
در کوئری که نوشتم فقط بجای inner join از right outer join استفاده کنید.