View Full Version : دستور فقط در کوئری
m.4.r.m
سه شنبه 18 آبان 1400, 12:42 عصر
دو تا جدول داریم یکی مشتری یکی محصول
در جدول محصول برای مشتری چند محصول همزمان ثبت کرده ایم.
سوال میخواهیم با دستور جوین بین این دو جدول فقط مشتری هایی رو نشون بده که فقط محصول مد نظر رو خریداری نکرده اند.
مشتری یک: سایپا
مشتری یک: ایران خودرو
مشتری دو: سایپا
حالا می خوام مشتری هایی که محصول ایران خودرو ندارن رو فقط نشون بده
mmbguide
سه شنبه 18 آبان 1400, 16:18 عصر
سلام
میتونید در جایی که دارید شرط رو اعمال میکنید از Not Like استفاده کنید. همه محصولاتی را نمایش بده که در لیست محصولات ایران خودرو وجود ندارد: Not Like 'ایران خودرو'
m.4.r.m
سه شنبه 18 آبان 1400, 17:36 عصر
تو این دستور مشتری اول رو هم نشون میده چون سایپا داره من میخوام دستوری بنویسم که فقط مشتری ۲ رو نشون بده که ایران خودرو نداره حالا اینجا هر مشتری دو تا محصول ثبت شده ممکنه چند صد تا محصول دیگه به اسمش باشه
mmbguide
چهارشنبه 19 آبان 1400, 00:00 صبح
من سه تا جدول مطابق تصویر زیر ایجاد کردم و اطلاعات اولیه را هم ثبت کردم
153575
جدول مشتری ها
جدول محصولات
جدل سفارش
در جدول سفارش یکی از مشتری ها یک محصول کمتر خرید کرده است و قراره که در خروجی مشتریانی حذف شوند که محصول مورد نظر را خرید نکرده اند.
select
*
from
tblOrder
where
fldProductID in (10,11,13) and
fldCustomerID <> (select top 1 fldCustomerID from tblOrder where fldProductID not in(12))
توضیحات بخش where:
شرط اول میگه سفارشاتی که شامل محصولات شماره 10، 11 و 13 هستند را نمایش بده
شرط دوم میگه فقط مشتریانی که فاقد محصول شماره 12 هستند را نادیده بگیر
در نمونه بالا هدف از استفاده in و not in این هستش که بتونید محصولات بیشتری را در شرط لحاظ کنید.
خروجیی دستور بالا:
153576
البته ممکنه راه های بهتری برای اینکار وجود داشته باشه ولی فعلا این به ذهنم رسیده
mmbguide
چهارشنبه 19 آبان 1400, 00:05 صبح
در نمونه بالا این امکان وجود داشت که تنها یک مشتری نادیده گرفته بشه. علامت <> و استفاده از top 1.
در نمونه پایین بجای استفاده از <> من از not in استفاده کردم و عبارت top 1 را حذف کردم تا خروجی دستور select بتونه تمام مقادیر را برگردونه. در نتیجه محدودیت تعداد مشتری هایی که باید نادیده گرفته بشن هم برداشته شده:
select
*
from
tblOrder
where
fldProductID in (10,11,13) and
fldCustomerID not in (select fldCustomerID from tblOrder where fldProductID not in(12))
mazoolagh
چهارشنبه 19 آبان 1400, 08:26 صبح
یک راه این هست که اول id خریدارانی که محصول "ایران خودرو" خریدن رو پیدا کنین و بعد اونها رو از خروجی کنار بگذارین:
SELECT customer_name,... FROM customers
WHERE customer_id NOT IN
(SELECT customer_id FROM customers
INNER JOIN orders
ON customers.customer_id=orders.customer_id AND orders.product_name='IranKhodro')
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.