PDA

View Full Version : کمک برای تکمیل کد TSQL یک جستجو



dr.pantagon
پنج شنبه 28 آذر 1392, 16:10 عصر
سلام
من سه تا جدول دارم به اسم
callerid
t_member
t_phonebook

جدول کالر آیدی هر کسی رو تماس بگیره ذخیره می کنه

مشکل اینجاس که من یک گرید گذاشتم که می خوام دیتا های توی جدول callerid رو بخونه و توی جدول t_phonebook چک کنه شمارش اگر بود اسم و فامیل مشترک رو از t_member لود کنه اگرم نبود بزنه مشترک نیست

من این کد رو خودم نوشتم
SELECT dbo.T_Members.fname + ' ' + dbo.T_Members.lname AS Expr1, dbo.callerid.tel_num
FROM dbo.T_Members INNER JOIN
dbo.T_phoneBoke ON dbo.T_Members.code = dbo.T_phoneBoke.Member_Code INNER JOIN
dbo.callerid ON dbo.T_phoneBoke.Phone_no = dbo.callerid.tel_num

این کد الان اگر شماره موجود باشه فقط اسم و فامیل رو بر می گردونه ولی اگر شماره ای که در کالر آیدی هست در جدول phonebook نبود چیزی لود نمی کنه می خوام لود کنه مشترک نیست جای اینکه لود نکنه هیچی

114140
مثلا در عکس بالا به جای Expr1 بزنه مشترک نیست

الان فقط وقتی شماره موجود باشه اسم هم موجود باشه لود میشه و باقیه نفراتی که مشترک نیستن و شمارشون تو callerid هست رو نشون نمیده

farazjalili
پنج شنبه 28 آذر 1392, 16:40 عصر
سلام کد زیر رو امتحان کنید
SELECT dbo.T_Members.fname + ' ' + dbo.T_Members.lname AS Expr1, dbo.callerid.tel_num
FROM dbo.T_Members LEFT JOIN
dbo.T_phoneBoke ON dbo.T_Members.code = dbo.T_phoneBoke.Member_Code LEFT JOIN
dbo.callerid ON dbo.T_phoneBoke.Phone_no = dbo.callerid.tel_num

dr.pantagon
پنج شنبه 28 آذر 1392, 17:12 عصر
farazjalili عزیز متاسفانه درست نشد


متاسفانه جواب نداد
این عکسش

114141

aslan
پنج شنبه 28 آذر 1392, 19:27 عصر
سلام
اول callerid بنویسید و بعد بقیه را ..............
dbo.callerid
left outer join
dbo.T_phoneBoke
inner join
dbo.T_phoneBoke
................

و برای اینکه بجای null متن دلخوه شما نشان داده شود از ISNULL استفاده کنید

ISNULL(dbo.T_Members.fname,"مشترک نیست")

dr.pantagon
پنج شنبه 28 آذر 1392, 23:48 عصر
یعنی کدم رو اینطوری کنم ؟

SELECT ISNULL(dbo.callerid.tel_num, N'مشترک نیست') AS Expr2, dbo.T_Members.fname + ' ' + dbo.T_Members.lname AS Expr1
FROM dbo.T_Members LEFT OUTER JOIN
dbo.T_phoneBoke ON dbo.T_Members.code = dbo.T_phoneBoke.Member_Code LEFT OUTER JOIN
dbo.callerid ON dbo.T_phoneBoke.Phone_no = dbo.callerid.tel_num
WHERE (dbo.callerid.tel_num = dbo.T_phoneBoke.Phone_no)

ولی مشکل اینجاست من برای اینکه همه مشترکین رو نشون نده و فقط مشترکینی که توی لیست کالر ایدی شماره دارن رو نشون بده از دستور زیر استفاده کردم
WHERE (dbo.callerid.tel_num = dbo.T_phoneBoke.Phone_no)]

و این کد تا اینجاش درسته مشکل اینجاس که اگر تو کالرآیدی شماره ای باشه که تو قسمت مشترکین نباشه نشون نمیده
میشه عکس زیر من پنج تا رکورد دارم 4 تاشون عضو هستن ( که نشون میده ) یک نفر عضو نیست ( که نشونش نمی ده )
من میخوام اون یکی رو هم نشون بده و جای اسم و فامیل بزنه مشترک نیست . امیدوارم واضح توضیح داده باشم
114160

پیشاپیش از تشکرهاتونم تشکر می کنم

aslan
جمعه 29 آذر 1392, 00:10 صبح
سلام
مگرنمیخواین همه رکوردهای جدول کالرایدی را بهمراه فیلدهای مرتبط در سایر جدولها را نشون بده ؟؟؟؟
اگر برداشتم درست باشه چیزی شبیه کد زیر باید استفاده کنین


SELECT ISNULL(T_Members.fname, [مشترک نیست]) AS Expr1, callerid.tel_num
FROM callerid LEFT OUTER JOIN
T_phoneBoke ON T_phoneBoke.Phone_no = callerid.tel_num INNER JOIN
T_Members ON T_Members.code = T_phoneBoke.Member_Code


اگر با کد بالا جواب نگرفتین و مایل بودین ... اطلاعات رکوردی هر 5 نفر ذکر شده در پست 15 را اینجا قرار بدین (هر سه جدول )

dr.pantagon
جمعه 29 آذر 1392, 00:51 صبح
فایل دیتابیس رو اتچ کردم

اجرای کد آخرم رو همراه با جدول گذاشتم
114163

aslan
جمعه 29 آذر 1392, 01:17 صبح
سلام
شرمنده. من ورژن SQL ام پایینه ونتونستم فایل را اتچ کنم . لطفا تصویر رکوردها را اینجا بزارید :
کد زیر را هم تست کنید :


SELECT ISNULL(T_Members.fname, [مشترک نیست]) AS Expr1, callerid.tel_num
FROM callerid LEFT OUTER JOIN
T_phoneBoke ON T_phoneBoke.Phone_no = callerid.tel_num LEFT OuTER JOIN
T_Members ON T_Members.code = T_phoneBoke.Member_Code