PDA

View Full Version : مشکل جستجو در تیبل توسط دستور select



mhamedm2008
چهارشنبه 20 بهمن 1395, 12:19 عصر
با سلام
من از به عنوان مثال از دستور زیر برای جستجو استفاده می کنیم.

select nam from master where kod=1

حال می خواهم کاری کنم که توی فیلد آدرس هم جستجو کنم. به صورتی که زمانی که پارامتر ورودی null باشه جستجو توی تمام رکورد ها انجام بشه

select nam from master where kod=1 and (address = isnull(@search,address))

در حالت کلی با این مدل دستور ها هیچ مشکلی ندارم. مشکل از اون جایی شروع میشه که اگر فیلد های address من توی table هم null باشه، اون رکورد ها رو برای جستجو در زمانی که متغییر @search من هم null باشه نمایش نمی ده.

به عبارت دیگر، اگر دستور رو به صورت زیر بنویسم

select nam from master where kod=1 and (family = isnull(@search_family,family))

هیچ مشکلی ندارم. چرا که تمامی فیلد های family من دارای متغییر هست. واگر @search_family من هم null باشه، باز هم تمامی رکورد های من و نشون میده

ولی توی فیلد آدرس، به دلیلی اینکه همه رکورد ها شامل مقادیر addressنمی باشند. زمانی که @search برابر null باشه، تمامی رکورد ها نمایش داده نمیشه.


چه راهی برای حل این مشکل پیشنهاد می کنید.
خیلی خیلی ممنون

حمیدرضاصادقیان
پنج شنبه 21 بهمن 1395, 18:18 عصر
سلام
از این منطق استفاده کنید.

Select * from Table1
wehre Field1=Coalesce(@PAram1,Feild1)

mhamedm2008
جمعه 22 بهمن 1395, 09:58 صبح
سلام
از این منطق استفاده کنید.

Select * from Table1
wehre Field1=Coalesce(@PAram1,Feild1)


سلام
متسفانه باز هم نشد. دلیل این هست که کل رکورد های درون Field1 برابر null هست.
با استفاده از این دستور هم فقط رکورد هایی که مقدار داشته باشند و نشون میده.
چه راهی پشنهاد می کنید؟؟

حمیدرضاصادقیان
جمعه 22 بهمن 1395, 11:13 صبح
این دستور داره میگه که اگه پارامتر بهش ارسال شد ، همون مقدار رو بیار اگر نشد کل رکوردهارو بیار . یعنی اگه null به این پارامتر پاس بدین کل رکوردهارو میاره.
کار این تابع این هست که نگاه میکنه اولین پارامتر اگه مقدار داشته باشه اونو میذاره اگه نه مقدار دوم رو میذاره.
کدی که نوشتین رو بذارید

mhamedm2008
پنج شنبه 28 بهمن 1395, 18:11 عصر
این دستور داره میگه که اگه پارامتر بهش ارسال شد ، همون مقدار رو بیار اگر نشد کل رکوردهارو بیار . یعنی اگه null به این پارامتر پاس بدین کل رکوردهارو میاره.
کار این تابع این هست که نگاه میکنه اولین پارامتر اگه مقدار داشته باشه اونو میذاره اگه نه مقدار دوم رو میذاره.
کدی که نوشتین رو بذارید

سلام

این هم از کد :

SELECT sanad_master.serial, sanad_master.tarikh,
sanad_master.ta_madrak, sanad_master.ser_madrak, sanad_master.bes, sanad_master.bed, sanad_master.moghayerat, sanad_master.exp0
FROM bank LEFT OUTER JOIN
sanad_master ON bank.tafsili2 = sanad_master.tafsili2 AND bank.tafsili1 = sanad_master.tafsili1 AND bank.moin = sanad_master.moin AND
bank.kol = sanad_master.kol AND bank.group_hesab = sanad_master.group_hesab
WHERE
(sanad_master.exp0= Coalesce(@exp0,sanad_master.exp0))
order by sanad_master.tarikh desc


تصویر زیر زمانی هست که دستور where رو حذف می کنم. و نتیجه رو نشون میده

144496



این تصویر مربوط به زمانی هست که دستور where رو اضافه می کنم

144497


این و هم بگم که از توی خود نرم افزار هم هیمن جوریه. ولی برای کمک کردن راحت شما دستور رو توی SQL نشون دادم. اگر فیلد exp0 رو روی توی تیبل مقدار خاصی بهش بدم، شرط به درستی کار میکنه. ولی اگر null باشه همچین مشکلی به وجود میاد
با تشکر
ممنون میشم که کمک کنید. خیلی روی اعصابمه

حمیدرضاصادقیان
پنج شنبه 28 بهمن 1395, 22:25 عصر
اینجوری بنویسید
where Sanad_master.exp0=@Exp0 or @Exp0 is null

mhamedm2008
پنج شنبه 28 بهمن 1395, 23:28 عصر
خیلی خیلی ممنون
حل شد:لبخندساده: