PDA

View Full Version : یک مشکل خنده دار دستور SQL server



hessam2003
شنبه 05 بهمن 1392, 23:48 عصر
سلام.
من میخوام کدی که درون جدول Academy_order_account ذخیره شده فامیلیش نمایش داده بشه اما به تعداد مقادیر ثبت شده در جدول Academy_order فامیل را نمایش میدهد.!!!

کد نوشته شده:
select Order_account_family from Academy_order_account,Academy_order
where Academy_order_account.Order_id=1

به طور مثال من کد 1 به فامیل وحیدی ثبت کردم در جدول Academy_order_account
و در جدول Academy_order کد1 و کد 2 ثبت دارم حالا وقتی این کوءری رو اجرا میکنم دوتا وحیدی بهم نمایش میده در صورتی که باید فقط یک وحیدی نمایش بده
کسی میدونه این مشکل چجوری قابل حل شدنیه؟

Reza_Yarahmadi
یک شنبه 06 بهمن 1392, 08:48 صبح
این مشکل از SQL Server نیست!
شما یک Cross Join روی 2 جدول زدید بدون هیچ فیلتری ، شرط رابطه بین 2 جدول رو باید به دستورتون اضافه کنید
select Order_account_family from Academy_order_account,Academy_order
where
Academy_order_account.ID = Academy_order.AccountID
AND
Academy_order_account.Order_id=1

saeedr22
یک شنبه 06 بهمن 1392, 09:32 صبح
بلی ضرب دکارتی (http://fa.wikipedia.org/wiki/%D8%B6%D8%B1%D8%A8_%D8%AF%DA%A9%D8%A7%D8%B1%D8%AA% DB%8C) صورت گرفته

hessam2003
یک شنبه 06 بهمن 1392, 09:51 صبح
یک سوال دیگه Reza_Yarahmadi شما در چه محیطی کدارو مینویسید که به با این پس زمینه ای سفید ایجاد میشه. چون من وقتی کدو از محیط برنامه نویسی اینجا تو یک تاپیک کپی میکنم معمولا کدا بهم میریزن!!

starting
یک شنبه 06 بهمن 1392, 10:08 صبح
یک سوال دیگه Reza_Yarahmadi شما در چه محیطی کدارو مینویسید که به با این پس زمینه ای سفید ایجاد میشه. چون من وقتی کدو از محیط برنامه نویسی اینجا تو یک تاپیک کپی میکنم معمولا کدا بهم میریزن!!
در "ویرایشگر" که مطلب خودتان را وارد و ویرایش می کنید یکسری امکانات اون بالاش داره که یک گروهش مربوط میشه به Tag اصطلاحا. شما SQL رو انتخاب کن اوکی میشه

hessam2003
یک شنبه 06 بهمن 1392, 10:14 صبح
مشکلش حل نشد!!
این مقادیر ثبت شده در جدول 1:
http://upload7.ir/imgs/2014-01/85927273698390988701.jpg
مقادیر ثبت شده در جدول 2:
http://upload7.ir/imgs/2014-01/88118647467951921915.jpg
نتیجه:
http://upload7.ir/imgs/2014-01/41944533555431994485.jpg

starting
یک شنبه 06 بهمن 1392, 10:24 صبح
تعجبی نداره. بعضی موقع ها این مشکلات پیش میاد اسکیوال سرور دیگه.
در این مواقع یک DISTINCT بلافاصله بعد از SELECT می ذارن و مشکل حل میشه

hessam2003
یک شنبه 06 بهمن 1392, 11:11 صبح
این کد با اینکه کلمه Distinct رو گذاشتم با تکراری نمایش میده!!
ALTER procedure [dbo].[Academy_register_search]
@Reg_id char(10),
@Reg_date char(10),
@Reg_family nvarchar(50)
AS
if(@Reg_id is not null) or (@Reg_date is not null) or (@Reg_family is not null)
select DISTINCT * from Academy_register,Academy_register_account
where Academy_register.Reg_id=Academy_register_account.R eg_id
and
(Academy_register.Reg_id like @Reg_id) or (Reg_date like @Reg_date) or (Reg_account_family like @Reg_family)
else
select * from Academy_register

Mahdi.Delphi
یک شنبه 06 بهمن 1392, 12:39 عصر
مشکلش حل نشد!!
این مقادیر ثبت شده در جدول 1:
http://upload7.ir/imgs/2014-01/85927273698390988701.jpg
مقادیر ثبت شده در جدول 2:
http://upload7.ir/imgs/2014-01/88118647467951921915.jpg
نتیجه:
http://upload7.ir/imgs/2014-01/41944533555431994485.jpg

خوب شما توی جدول دوم 4 تا Order_id یکسان دارید و باید 4 تا جواب هم بگرده دیگه !!!

توی DISTINCT هم چون چند تا Table رو Join کردین و * SELECT بکار بردین در سطرهای جواب همه فیلدها یکسان نیست!

hessam2003
یک شنبه 06 بهمن 1392, 13:03 عصر
ALTER procedure [dbo].[Academy_register_search]
@Reg_id char(10),
@Reg_date char(10),
@Reg_family nvarchar(50)
AS
if(@Reg_id is not null) or (@Reg_date is not null) or (@Reg_family is not null)
select DISTINCT * from Academy_register,Academy_register_account
where Academy_register.Reg_id=Academy_register_account.R eg_id
and
(Academy_register.Reg_id like @Reg_id) or (Reg_date like @Reg_date) or (Reg_account_family like @Reg_family)
else
select * from Academy_register

خب برای حل این مشکل چکار باید بکنم؟؟؟؟ که تکراری نمایش نده

حمیدرضاصادقیان
یک شنبه 06 بهمن 1392, 13:12 عصر
سلام.

تعجبی نداره. بعضی موقع ها این مشکلات پیش میاد اسکیوال سرور دیگه.
در این مواقع یک DISTINCT بلافاصله بعد از SELECT می ذارن و مشکل حل میشه

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

ایشون با این شرطی که گذاشتن رکورد تکراری دارن چه ربطی به SQL Server داره؟؟

starting
یک شنبه 06 بهمن 1392, 13:49 عصر
عذر می خوام فکر نمیکردم ناراحت بشین. فقط خواستم مزاحی کرده باشم. چون پرسش گر خیلی با تعجب از نتیجه حاصله یاد میکنه که من هم به مبادرت به این مزاح ترغیب شدم

حمیدرضاصادقیان
یک شنبه 06 بهمن 1392, 14:04 عصر
بسیار خوب.چون جمله هیچگونه علامت محاوره ای داخلش نبود و نمیشد مزاح بودن رو ازش برداشت کرد وگرنه ناراحت نشدم چون پستهای شمارو دنبال میکنم و از این جمله تعجب کردم درغیر اینصورت کس دیگه ای بود پستش حذف میشد.
ممنون بابت توضیح تون.

hessam2003
یک شنبه 06 بهمن 1392, 14:41 عصر
این پروسجور آخری که گذاشتمو کسی نمیدونه مشکلش کجاست که فیلدهای تکراری میده؟!