PDA

View Full Version : مبتدی: مانع از ضرب دو جدول



81579001
یک شنبه 08 آذر 1388, 21:00 عصر
سلام
یک سئوال ساده
دو جدول دارم که وقتی آنها را Select می کنم در هم ضرب می شوند چطور از این کار جلوگیری کنم
تشکر

محمد سلیم آبادی
دوشنبه 09 آذر 1388, 03:16 صبح
سلام دوست عزیز،
این دو جدول را با یک select انتخاب می کنید؟ بطور مثال
select * from table_1, table_2

اگر اینگونه باشد ضرب شدن دو جدول طبیعی است چون در هنگام اجرای query علامت کاما تبدیل به cross join میشود که در نهایت دو جدول با یکدیگر ضرب می شوند.

81579001
دوشنبه 09 آذر 1388, 11:36 صبح
سلام
اشکال بنده همینجا است
که نمی دانم از چه دستوری استفاده کنم تا لیست کامل هر دو جدول را بدون ضرب شدن نمایش دهد


تشکر

amin_alexi
دوشنبه 09 آذر 1388, 11:41 صبح
آيا بين جداول ارتباطي وجود داره ؟ (مثل كليد اصلي و خارجي)
اگه آره مي تونيد از انواع Join استفاده كنين.

حسین شهریاری
دوشنبه 09 آذر 1388, 11:41 صبح
سلام

فکر نکنم چنین دستوری وجود داشته باشه!
ولی پیشنهاد میکنم حد اقل از inner join استفاده کنین تا هزینه ضرب کردن را کاهش بدید و در غیر اینصورت نمیشه هم خروجی ترکیبی از دو جدول داشت و هم آنها را در هم ضرب نکرد.

موفق باشید

81579001
دوشنبه 09 آذر 1388, 15:01 عصر
ببخشید
از inner join چطور باید استفاده کرد؟
ویا چطور باید در برنامه از نمایش دو جدول استفاده کرد؟
تشکر

حسین شهریاری
دوشنبه 09 آذر 1388, 15:15 عصر
اینطوری:

select table1.field1,table1.field2,...,table1.fieldn,tabl e2.field1,table2.field2,...table2.fieldn from table1
inner join table2 on(table1.field1=table2.field1)
به مثال توجه کنید:

select orders.code#,kalaname,tedad,price from orders inner join kalapropertis
on(orders.code#=kalapropertis.code#)

81579001
دوشنبه 09 آذر 1388, 20:27 عصر
سلام
با تشکر از راهنمای شما اما جدول را خالی نمایش می دهد البته می دانم از ناشی بودن من است
این هم عکس
البته از این کد هم استفاده کردم جواب همان بود

select Ttest2 .Asm ,Ttest3 .Famili from Ttest2 inner join Ttest3
on(Ttest2 .ID =Ttest3 .ID3 )
تشکر

حسین شهریاری
سه شنبه 10 آذر 1388, 10:53 صبح
سلام
دوست عزیز مشکل شما اینه که مقابل On باید فیلدی را نام ببرید که توی دو جدول مشترک باشه.یعنی عامل ارتباط بین جداولتون را کدوم فیلده؟
اگه فیلد Asm هستش باید بدین شکل عمل کنید:
on(Test2.Asm=Test3.Asm)
من فرض کردم دوجدول شما فیلد مشترکی به نام Asm دارند.
موفق باشید

pourang_us
سه شنبه 10 آذر 1388, 12:34 عصر
دوست عزیز
درود
اگر برای شما مطرح نیست که اطلاعات دو جدول به چه صورتی برای شما لیست بشوند و فقط خروجی حاصل دو ترکیب جدول برای شما اهمیت دارد میتوانید از تزکیب دو دستور Select با Union استفاده نمایید مثل:

Select * From Tbl01
Union
Select * From Tbl02

اما چنانچه برای شما مطرح است که فیلدهای خاصی از جداول که با هم Relation دارند میتوانید از شکل زیر استفاده نمایید

Select Name , Family , Job Title From Tb01 a, Tbl02 B where a.id = b.tbl01title

81579001
چهارشنبه 11 آذر 1388, 18:13 عصر
سلام
با تشکر از راهنمای شما اما پیام خطا می دهد

Msg 205, Level 16, State 1, Line 2
All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.
در عکس زیر

محمد سلیم آبادی
چهارشنبه 11 آذر 1388, 18:22 عصر
تعداد ستون های انتخاب شده در قسمت column source باید برابر باشه. اگر برابر هم نیست می تونین از null برای برابر شدن ستون های دو جدول استفاده کنید.

مثلا:
select col1, col2
union all
select col1, null

81579001
جمعه 13 آذر 1388, 18:28 عصر
تشکر از جواب شما
ولی ستون هارا در زیر هم نشان داد ولی من در کنار هم می خواهم