PDA

View Full Version : --SQL--تقدم شرط بر جوین --SQL--



ali_bagheri34
پنج شنبه 21 شهریور 1387, 17:25 عصر
سلام دوستان
من مدتی است که از اکسس پروجکت استفاده می کنم لطفا با فایل تصویر که اتچ شده است با دقت نگاه کنید
در این مثال اس کیو ال ابتدا جوین را اجرا کرده و بعد شرط را اجرا می نماید من می خواهم اول شرط اجرا شود و بعد جوین لطفا به من کمک کنید


راه حل خودم به این صورت است که یک کویری ساخته ام که شرط را در کویری پیاده کرده ام و آم کویری را با جدول tblRecivedCompany_Account جوین کرده ام در این حالت ابتدا شرط اجرا شده و بعد جوین

ولی دوستان میدانم که در اس کیو ال می توان این را تقدم و تاخر را در نظر گرفت و احتیاجی به ساخت کویری دوم ندارم
لطفا کمک کنید

AminSobati
جمعه 22 شهریور 1387, 00:47 صبح
دوست عزیزم نیاز شما کمی جای بحث داره. بانک اطلاعاتی مطابق چیزی که شما نوشتین الزاما ترتیب رو نباید رعایت کنه، بلکه باید بهینه ترین روش رو در پیش بگیره. اگر شما نتیجه متفاوتی از Query انتظار دارید، پس Query رو اشتباه نوشتین. بر اساس منطق زبان SQL باید Query خودتون رو بنویسین و نحوه اجرا رو به Engine محول کنید

ali_bagheri34
شنبه 23 شهریور 1387, 09:42 صبح
سلام رفیق
حالا که کویری را اشتباه نوشته ام راهنمایی کنید که چگونه می توانم اول شرط را پیاده کنم و بعد جوین را ؟؟؟؟؟؟؟؟؟؟؟؟

در ضمن یکی از دوستان من که کاربلد این کار (اس کیو ال بود ) روشش را بهم یاد داد ولی متاسفانه الان در دسترس نیس (مدتی است ) و من هم الان یادم رفته لطفا اگر می دانید بهم کمک کنید (یک مثال بزنید)

AminSobati
شنبه 23 شهریور 1387, 12:07 عصر
در ساختار زبان SQL، اول شرط Join (قسمت ON) باید اعمال بشه بعد Where. با توضیحی که دادین من احتمال میدم شما نیاز دارین شرط Where رو در شرط Join دخالت بدین. اگر اینطوره مشکل نیست. شرط ON رو با WHERE میتونین AND کنین و WHERE رو ننویسین

ali_bagheri34
شنبه 23 شهریور 1387, 14:29 عصر
در ساختار زبان SQL، اول شرط Join (قسمت ON) باید اعمال بشه بعد Where. با توضیحی که دادین من احتمال میدم شما نیاز دارین شرط Where رو در شرط Join دخالت بدین. اگر اینطوره مشکل نیست. شرط ON رو با WHERE میتونین AND کنین و WHERE رو ننویسین


سلام
از اینکه جواب منو دادید متشکرم
من خوب متوجه نشده ام لطفا کمی بیشتر توضیح بدهید و اگر امکان دارد یک مثال برایم بزنید
با تشکر فراوان

AminSobati
شنبه 23 شهریور 1387, 17:15 عصر
ON t1.id=t2.id and t2.col=somevalue

ahmad1358
یک شنبه 24 شهریور 1387, 13:21 عصر
با سلام
من تو يه پست به نام استفاده از دستور if در كوئري تقريبا همين سوال را مطرح كرده بودم حالا ميخوام بدونم اگه من كدمو اينجوري بنويسم :


SELECT dbo.barge.code_n, COUNT(*) AS tedad
FROM dbo.barge
inner join dbo.barge1
on
(dbo.barge.a1_1 = dbo.barge1.a1_1 and dbo.barge.a1_1=1) and
(dbo.barge.a1_2 = dbo.barge1.a1_2 and dbo.barge.a1_2=1)
GROUP BY dbo.barge.code_n

اگه اين شرط dbo.barge.a1_1=1 برقرار نباشه ولي اين شرط dbo.barge.a1_2=1 برقرار باشه
اين شرط dbo.barge.a1_2 = dbo.barge1.a1_2 اعمال ميشه يا نه؟
ممنون

AminSobati
یک شنبه 24 شهریور 1387, 23:01 عصر
دوست عزیزم زمانی که شما inner join استفاده میکنین، شرطهای where رو اگر به on منتقل کنین تاثیری نداره. ولی در outer join نتیجه متفاوت میشه. در ضمن وقتی همه شرطها حالت and دارند، SQL Server از ایندکسی استفاده میکنه که شرط شما بتونه بلافاصله نتیجه رو کاهش بده. یعنی به ترتیب نوشتن شرطهای and شده کاری نداره