PDA

View Full Version : مشکل در inner join



aliasghar2
دوشنبه 16 اسفند 1389, 12:44 عصر
سلام دوستان

یه مشکل عجیب واسم پیش اومده
فرض کنید تو بانکم سه تا جدول هست به نام های کاربر و شهر و تحصیلات کاربر
که جدول کاربر از طریق کد کاربر به جدول تحصیلات واز طریق کد شهر به جدول شهر وصل شده
جدول تحصیلات هم از طریق کد محل تحصیل به جدول شهر وصل شده

حالا اگه بخوام تمام inner join هارو لحاظ کنم اون موقع اگه اگه فیلد هارو بخوام نمایش بدم رکورد هایی که کد شهر کاربر وکد محل تحصیلشون باهم فرق کنه رو نشون نمیده مثلا اگه (فردی باشه با نام علی شهر تهران و محل تحصیل مشهد )تو نمایش چنین فردی رو نمایش نمی ده


حالا اگه inner join شهر با تحصیلات رو بردارم جواب میده ولی رکورد ها تکرای میشه مثلا وهر فرد رو دوبار نمایش میده که من از طریق slelect distinct اینو حل کردم ولی یه مشکل دیگه بوجود اورد واون اینه که فیلدی تو جدول کاربر دارم که وجودش اجباری و این فیلد ntext است و select distinc این فیلد رو ارور میده

Reza_Yarahmadi
دوشنبه 16 اسفند 1389, 18:54 عصر
دستوری که نوشتید رو اینجا بذارید تا بهتر بشه کمکتون کرد.
چیزی که حدس میزنم اینه که جدول ها رو از طریق 2 Join به هم وصل کردید در حالی که باید Join های کاربر با تحصیلات و تحصیلات و شهر رو جداگانه انجام بدید (در کل 3 Join انجام بشه).
Select
U.Name,
C.CityName,
S.StudyName,
C2.CityName as StudyCityName
From
Users U inner join City C
On
U.CityId = C.ID
Inner Join Study S
On
U.StudyId = S.Id
Inner Join City C2
On
S.CityId = C2.Id

این فیلد ntext است
به جای ntext از nvarchar استفاده کنید.

aliasghar2
دوشنبه 16 اسفند 1389, 22:48 عصر
به جای ntext از nvarchar استفاده کنید

جالب بود ولی نمی دونم چرا به فکر خودم نرسید استفاده از nvarchar به جای ntext
راستی یه سوال دیگه اگه از
nvarchar(max)استفاده کنم مشکلی پیش نمیاد ؟ چون شاید مقدار زیادی رو وارد کنن

Reza_Yarahmadi
سه شنبه 17 اسفند 1389, 10:04 صبح
مشکلی پیش نمیاد ؟ چون شاید مقدار زیادی رو وارد کنن
استفاده از این نوع محدودیتهایی داره (بطور مثال نمیشه روی این نوع فیلدها ایندکس تعریف کرد) ولی از نظر تغییر ntext به nvarchar مشکلی پیش نمیاد. این نوع داده تا 1,073,741,824 کاراکتر گنجایش داره ، در صورتیکه این حجم داده(2 گیگ) برای شما کافی نیست باید تغییراتی توی طراحی دیتابیس بدید چون SQL Server بیشتر از این مقدار رو پشتیبانی نمیکنه.