PDA

View Full Version : مشکل در join سه جدول با فیلدهای recorddeleted



nafisehk
دوشنبه 29 مهر 1392, 09:51 صبح
سلام
سه تا ججدول دارم جدولای اصلی
userinfo: userid,recordeleted
Roleinfo:roleid,rolename,recorddeleted
و جدول واسط هم
userrole: userid,roleid,recorddeleted

میخوام اطلاعات یوزر همراه سمتش و تو گرید نشون بدم

این join زدم اما درست نیست



select ui.UsrID,ui.UsrName,ui.UsrType,ui.UsrFirstName,ui. UsrLastName,ui.UsrAbbreviation,ui.UsrEmail,ui.UsrT elNumbers,ui.UsrAddress,ri.RolName from UserInfo ui leftjoin UserRole ur

on ui.UsrID=ur.UserID leftjoin RoleInfo ri

on ur.RoleID=ri.RolID

where

ui.RecordDeleted!=1

and

ri.RecordDeleted!=1

orderby ui.UsrID

veniz2008
دوشنبه 29 مهر 1392, 10:08 صبح
سلام.
درست نشون نمیده یعنی چی؟
یعنی خطا میده؟!
یا اینکه خروجی اشتباه تولید میکنه؟
یا اصلا هیچی نشون نمیده؟
آیا اطلاعات همه یوزرها رو میخوای؟ چه اونهایی که براشون role ثبت شده چه نشده؟
راستی order by هم جدا از هم هست (احتمالا اشتباه تایپی بوده).
هر چقدر کاملتر توضیح بدید سریعتر به جواب می رسید.(اگر هم بتونید عکسی از داده های جداولتون بزارید که بهتره).

nafisehk
دوشنبه 29 مهر 1392, 10:20 صبح
سلام.
درست نشون نمیده یعنی چی؟
یعنی خطا میده؟!
یا اینکه خروجی اشتباه تولید میکنه؟
یا اصلا هیچی نشون نمیده؟
آیا اطلاعات همه یوزرها رو میخوای؟ چه اونهایی که براشون role ثبت شده چه نشده؟
راستی order by هم جدا از هم هست (احتمالا اشتباه تایپی بوده).
هر چقدر کاملتر توضیح بدید سریعتر به جواب می رسید.(اگر هم بتونید عکسی از داده های جداولتون بزارید که بهتره).


تو نتیجه این کوئری که نوشتم یک سری از رکوردارو دو یا چند بار میاره..
یک کوئری که همه یوزرها رو نمایش بده
و یک کوئری که فقط کاربرایی که Role دارند رو نمایش بده

راستی order by هم جدا از هم هست
بله paste کردم اینطوری شده

veniz2008
دوشنبه 29 مهر 1392, 10:33 صبح
این چیزی که شما نوشتید و از left join استفاده کردید همه یوزرها رو در بر می گیره.
اگر رکوردها عینا تکراری هستن کافیه از کلمه کلیدی Distinct، بعد از select استفاده کنید تا از بین رکوردهای تکراری فقط یک رکورد رو نمایش بده.

Select Distinct ...

nafisehk
دوشنبه 29 مهر 1392, 10:43 صبح
این چیزی که شما نوشتید و از left join استفاده کردید همه یوزرها رو در بر می گیره.
اگر رکوردها عینا تکراری هستن کافیه از کلمه کلیدی Distinct، بعد از select استفاده کنید تا از بین رکوردهای تکراری فقط یک رکورد رو نمایش بده.

Select Distinct ...

باز تکراری هارو نشون میده...
دستور joini که نوشتم درسته(از این نظر که رکوردای حذف شده رو نمایش نده)

nafisehk
دوشنبه 29 مهر 1392, 11:24 صبح
اینطوری نمیشه کمکی کرد.
عکس هایی از داده های جداولتون و همچنین یک عکس از خروجی بذارید تا دربارش صحبت کنیم.

تعداد رکوردای جدولا خیلی بالاست
رو داده هایی که دستی وارد کنم هم نمیشه کوئری و تست کرد(حالتای مختلف و در نظر نمیگیره):افسرده:

veniz2008
دوشنبه 29 مهر 1392, 12:07 عصر
اگر داده های خاصی ندارید یه script از دیتابیستون بگیرید و اینجا بذارید.(داده های داخل جداولم بزارید باشن).
نحوه گرفتن script رو در این تاپیک (http://barnamenevis.org/showthread.php?415859-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA-%D9%88-%D9%86%D8%B8%D8%B1%D8%A7%D8%AA-quot-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D8%A7-%D8%A7%D9%86%D8%AA%D9%87%D8%A7-quot/page2) (پست 75) توضیح دادم.

nafisehk
دوشنبه 29 مهر 1392, 16:14 عصر
دوستان لطفا راهنمایی کنید

nafisehk
سه شنبه 30 مهر 1392, 08:30 صبح
کسی نیست که بتونه راهنمایی کنه؟

hamidkh
سه شنبه 30 مهر 1392, 11:06 صبح
سلام. بنظرم بهتر باشه اول فیلتر ها رو روی جداولت اعمال کنی بعد join کنی. اگرم کلا تکراری میاره رکوردارو همونطور که دوستموم گفتن با Distinct حل میشه (ولی نباید تکراری بیاره) در غیر اینصورت ممکن یه نفر چند تا نقش داشته باشه که میتونی group کنی

nafisehk
سه شنبه 30 مهر 1392, 13:56 عصر
سلام. بنظرم بهتر باشه اول فیلتر ها رو روی جداولت اعمال کنی بعد join کنی. اگرم کلا تکراری میاره رکوردارو همونطور که دوستموم گفتن با Distinct حل میشه (ولی نباید تکراری بیاره) در غیر اینصورت ممکن یه نفر چند تا نقش داشته باشه که میتونی group کنی


این کوئری و نوشتم

select ui.UsrID,ui.UsrName,ui.UsrType,ui.UsrFirstName,ui. UsrLastName,ui.UsrAbbreviation,ui.UsrEmail,ui.UsrT elNumbers,ui.UsrAddress,ri.RolName from UserInfo ui left join UserRole ur

on ui.UsrID=ur.UserID left join RoleInfo ri

on ur.RoleID=ri.RolID

where

(ui.UsrType='WN' or ui.UsrType='MN') and

ui.RecordDeleted!=1

and

ri.RecordDeleted!=1

and

ur.RecordDeleted!=1

با این کوئری یوزرایی که تو جدول RoleInfo سمتشون delete شده رو نمیاره...:افسرده: