PDA

View Full Version : استفاده از Minus ?



jirjirakk
سه شنبه 16 دی 1382, 13:44 عصر
سلام
از دستور Minus چی جوری میشه استفاده کرد؟
من این طوری کار کردم پیام خطا داد


Select Code,Price From tbl1
Minus
Select Code,Price From tbl2

hr110
سه شنبه 16 دی 1382, 14:24 عصر
با سلام
دستوری که نوشته اید در کجا استفاده کرده اید چون در SQLServer همچین چیزی نیست!
موفق باشید

jirjirakk
سه شنبه 16 دی 1382, 14:43 عصر
توی DBISAM از این دستور استفاده کردم

jirjirakk
سه شنبه 16 دی 1382, 21:49 عصر
کسی نبـــــــــــــــــــــــ ـــود :|

jirjirakk
چهارشنبه 17 دی 1382, 00:00 صبح
خودم احتمال میدم تابعش رو دی بی ایزام نداشته باشه؟
حالا یه سوال دیگه اگه تابعش رو نداشته باشه چی جوری مینوس رو پیاده سازی کنم

SyntaxCheck
چهارشنبه 17 دی 1382, 00:28 صبح
شکل استفاده شما از Minus درسته. فقط چیزی که برای من هم مجهوله اینه که مگه نه اینکه SQL یک استاندارده. پس چرا بعضی چیزها مثل همین Minus مثلا در Oracle هست اما تو اسکیو ال سرور و یا اکسس و یا بقول شما همین دی بی آیسام وجود نداره. به هر حال فکر میکنم بتونید با استفاده از Not in یه چیزی شبیه Minus رو بگیرید:


SELECT model
FROM kafsh_kharid
WHERE model not in (SELECT model FROM kafsh_foroosh)


مثال بالا تمام Model هایی رو که در kafsh_kharid هستند و در Kafsh_foroosh نیستند رو بر میگردونه(شبیه به کاری که Minus انجام میده).
البته این عمل تا جایی جوابش مانند Minus هست که تعداد فیلدهایی که برای شرط نبودن در کوئری دوم کنترل میشن از یکی بیشتر نشه. اگر کنترل رو مثل مثالی که شما زدید بخوایم برای دو فیلد(مانند مثالی که شما زدید) انجام بدیم منم جواب رو نمیدونم که چطور با Not in عمل Minus رو انجام بدیم. اگر کسی بلد هست بگه مشکل بزرگی رو برای من هم رفع کرده.
ممنون

phantasm
چهارشنبه 17 دی 1382, 11:59 صبح
sql چندتا استاندارد داره ولی بعضی برنامه ها اون رو توسعه دادن.
نمیدونم این روش میتونه مشکل رو حل کنه یا نه!!!

SELECT name, department_id
FROM department,
WHERE NOT EXISTS
(SELECT department_id
FROM employee
WHERE department.department_id=employee.department_id)



SELECT name, department_id
FROM department,
WHERE NOT IN
(SELECT department_id
FROM employee
WHERE department.department_id=employee.department_id)

jirjirakk
دوشنبه 22 دی 1382, 22:03 عصر
تشکر !
اما من میخوام بر اساس دو فیلد از همدیگه کم بشن

Select Fish,Price From Table1
MINUS
Select Fish,Price From Table2
این دستورات که لطف کردین میان بر اساس یک فیلد شرط رو تست میکنه
________________________________________
جیرجیرک همچنان گیج

Kambiz
سه شنبه 23 دی 1382, 03:01 صبح
تشکر !
اما من میخوام بر اساس دو فیلد از همدیگه کم بشن

Select Fish,Price From Table1
MINUS
Select Fish,Price From Table2
این دستورات که لطف کردین میان بر اساس یک فیلد شرط رو تست میکنه
________________________________________
جیرجیرک همچنان گیج

عملگر MINUS همون کاری رو می‌کنه که دوستان معادلش رو ذکر کردند نه اون چیزی رو که شما مد نظرتون هست.

Kambiz
سه شنبه 23 دی 1382, 03:05 صبح
شکل استفاده شما از Minus درسته. فقط چیزی که برای من هم مجهوله اینه که مگه نه اینکه SQL یک استاندارده. پس چرا بعضی چیزها مثل همین Minus مثلا در Oracle هست اما تو اسکیو ال سرور و یا اکسس و یا بقول شما همین دی بی آیسام وجود نداره. به هر حال فکر میکنم بتونید با استفاده از Not in یه چیزی شبیه Minus رو بگیرید:


SELECT model
FROM kafsh_kharid
WHERE model not in (SELECT model FROM kafsh_foroosh)


مثال بالا تمام Model هایی رو که در kafsh_kharid هستند و در Kafsh_foroosh نیستند رو بر میگردونه(شبیه به کاری که Minus انجام میده).
البته این عمل تا جایی جوابش مانند Minus هست که تعداد فیلدهایی که برای شرط نبودن در کوئری دوم کنترل میشن از یکی بیشتر نشه. اگر کنترل رو مثل مثالی که شما زدید بخوایم برای دو فیلد(مانند مثالی که شما زدید) انجام بدیم منم جواب رو نمیدونم که چطور با Not in عمل Minus رو انجام بدیم. اگر کسی بلد هست بگه مشکل بزرگی رو برای من هم رفع کرده.
ممنون

عملگرهای AND و OR برای همین منظورند. :)
در سرعت تاثیر چندانی نداره چون SQL Engine خودش در زمان اجرای دستور بهینه‌سازیهای لازم رو اعمال می‌کنه٬ البته به شرطی که SQL Engine یک چیز من‌درآوردی نباشه.