PDA

View Full Version : selcet in sql



sohil_ww
سه شنبه 25 تیر 1392, 22:45 عصر
من تو دیتا بیسم 2 تا جدول دارم برای مثال (food,buy,customer,user) و این جداول هر کدوم با 3 جدول دیگه در ارتباطا
این توضیح دادم که 1 پیش فرض از سوال داشته باشید .
من با Inner join به داده هاشون دسترسی دارم حالا می خوام که(با inner join یا هر دستور دیگه ای )جدول دیگمو فراخوانی کنم ولی وقتی میام از inner join استفاده کنم شرط بعد on می خوام همیشه برقرار باشه نمی دونم چی بنویسم
select distintic food.name,buy.name,customer.ID,customer.name ,user.name from coustomer inner join food
on food.ID=coustomer.ID inner join buy on buy.ID=food.ID inner join user // مشکل اینجاست من می خوام 1 فیلد از جدول یوزر بدون برسی چیزی قرار بدم

من امدم جدول user تو ا دستور select تو دیتا ست بریزم که موفقیت آمیز نبود در ضمن از دستور union هم برای ایجاد 2 select استفاده کردم که اونم به جواب نرسیدم
ممنون میشم دوستان و اساتید کمک کنن !

sohil_ww
چهارشنبه 26 تیر 1392, 07:31 صبح
اساتید ممنون میشم کمکم کنید

drsina
چهارشنبه 26 تیر 1392, 07:44 صبح
داداش سوالتو درست نفهمیدم ولی در کل برای این کار از Equi join استفاده کنی خیلی بهتره !
مثلا تو AdventureWork :

SELECT * FROM HumanResources.EmployeeDepartmentHistory d Join
HumanResources.Employee e ON d.EmployyeID JOIN
HumanResources.Department p ON p.DepartmentID = d.DepartmentID


در کل فکر نکم کسی اینجا کمکت کنه ! ببین تو stackoverflow کسی بلده ؟!!

sohil_ww
چهارشنبه 26 تیر 1392, 08:01 صبح
داداش سوالتو درست نفهمیدم ولی در کل برای این کار از Equi join استفاده کنی خیلی بهتره !
مثلا تو AdventureWork :

SELECT * FROM HumanResources.EmployeeDepartmentHistory d Join
HumanResources.Employee e ON d.EmployyeID JOIN
HumanResources.Department p ON p.DepartmentID = d.DepartmentID


در کل فکر نکم کسی اینجا کمکت کنه ! ببین تو stackoverflow کسی بلده ؟!!

مرسی ممنون از این که جواب دادی سئوال
1 توضیح درباره سئوالم بدم شاید نتونسته باشم منظورم برسونم
من می خوای دستور inner join را بدون (یا با حالت همیشه درست true) شرط بعد on اجرا کنم

یا 2 کوئری ،1 کی با مضمون کد پست اول و دیگری دستور select ساده

برای نوشتن این کد از ; بعد از اتمام دستور inner استفاده کردم ولی کار ساز نبود

sohil_ww
چهارشنبه 26 تیر 1392, 10:16 صبح
ممنون میشم اساتید راهنمای کنن

erfan_urchin
چهارشنبه 26 تیر 1392, 10:58 صبح
همچین چیزی امکان نداره
وقتی join میکنی حتما باید یه فیلد مشترک هم داشته باشی مثل id یا هرچیز دیگه
شما بگو میخوای چیکار کنی تا ما یه راه یا یه ترفندی جلوتون بزاریم

Hkarimi
چهارشنبه 26 تیر 1392, 10:59 صبح
سلام.
والا منم درس نفهمیدم سوالتون رو. ببین Inner Join واسه ارتباط چنتا جدوله که یه ارتباطی با هم داشته باشن. مثلا یه فیلد مشترک داشته باشن. و شرط هم معمولا روی همین فیلد مشترک نوشته میشه. بذا یه مثال بزنم ببین چجوریه
مثلا میخوام 2 تا جدول زیر رو به هم ارتباط بدم.


tblStudent(pk_id,fname,lname,pic)
tblDars(fk_id,dars,nomre)

حالا میام یه Inner join براش مینویسم که "تمام نمره های همه دانش آموزا" رو نمایش بده. به این جمله ها تو درس دیتابیس باید یه دقت فوق العاده داشت. حواست باشه. اوکی یه کدی مثل زیر از آب در میاد:


SELECT tblStudent.fname, tblStudent.lname,tblDars.dars, tblDars.nomre,tblStudent.pk_id
FROM tblStudent INNER JOIN
tblDars ON tblStudent.pk_id = dbo.tblDars.fk_id

در خروجی یه جدولی با 5 تا ستون به دست میاد که توی کویری بالا کاملا مشخصه. و شامل تمام نمرات تمام دانش آموزا میشه.

حالا شما شرطت چجوریه؟ رو چه فیلد مشترکی میخوای کار کنی؟ اینجوری مسئله یخورده گنگه. اگه جدولاتون رو بذارید بهتر میشه کارتون رو راه انداخت.

sohil_ww
چهارشنبه 26 تیر 1392, 11:00 صبح
مرسی ممنون از اینکه جواب دادی من می خوام علاوه بر ارتباط بین 3 تا جدولی که دارم 1 فیلد از 1 جدول دیگمم تو دیتاست ریخته بشه

hamid_hr
چهارشنبه 26 تیر 1392, 11:12 صبح
اگه ميخواي شرطط هميشه برقرار باشه بزار on 1 = 1 ولي خيلي غير منطقي هستش

sohil_ww
چهارشنبه 26 تیر 1392, 12:46 عصر
سلام.
والا منم درس نفهمیدم سوالتون رو. ببین Inner Join واسه ارتباط چنتا جدوله که یه ارتباطی با هم داشته باشن. مثلا یه فیلد مشترک داشته باشن. و شرط هم معمولا روی همین فیلد مشترک نوشته میشه. بذا یه مثال بزنم ببین چجوریه
مثلا میخوام 2 تا جدول زیر رو به هم ارتباط بدم.


tblStudent(pk_id,fname,lname,pic)
tblDars(fk_id,dars,nomre)

حالا میام یه Inner join براش مینویسم که "تمام نمره های همه دانش آموزا" رو نمایش بده. به این جمله ها تو درس دیتابیس باید یه دقت فوق العاده داشت. حواست باشه. اوکی یه کدی مثل زیر از آب در میاد:


SELECT tblStudent.fname, tblStudent.lname,tblDars.dars, tblDars.nomre,tblStudent.pk_id
FROM tblStudent INNER JOIN
tblDars ON tblStudent.pk_id = dbo.tblDars.fk_id

در خروجی یه جدولی با 5 تا ستون به دست میاد که توی کویری بالا کاملا مشخصه. و شامل تمام نمرات تمام دانش آموزا میشه.

حالا شما شرطت چجوریه؟ رو چه فیلد مشترکی میخوای کار کنی؟ اینجوری مسئله یخورده گنگه. اگه جدولاتون رو بذارید بهتر میشه کارتون رو راه انداخت.



من می خوام این بررسی انجام نشه tblStudent.pk_id = dbo.tblDars.fk_id[/CODE

Hkarimi
چهارشنبه 26 تیر 1392, 13:01 عصر
آخه نمیشه که ... پس SQL بخت برگشته چجوری بفهمه کدوم سطرها رو با هم ادغام کنه. شما اگه حاصل ضرب دکارتی از دوتا جدولتون رو میخواید، یعنی هر رکورد از جدول اول با تمام رکوردای جدول دوم مرتبط بشه باید از Cross join استفاده کنید.

sohil_ww
چهارشنبه 26 تیر 1392, 13:55 عصر
آخه نمیشه که ... پس SQL بخت برگشته چجوری بفهمه کدوم سطرها رو با هم ادغام کنه. شما اگه حاصل ضرب دکارتی از دوتا جدولتون رو میخواید، یعنی هر رکورد از جدول اول با تمام رکوردای جدول دوم مرتبط بشه باید از Cross join استفاده کنید.

بس که خنگه خودش بفهمه دیگه :لبخندساده:

من می خواستم بدونم راهی هست که همیشه شرط ture باشه 1 جورای مثل دستورات left join or right join البته این دستوراهم شرط همراهشونه

البته مشکل حل شد (ولی نه به اون صورت که می خواستم)
من تو حالت اول 2 تا جدول temp داشتم ولی وقتی دیدم راهی نیست امدم 1 جدول temp قرار دادم که با همه جداولم کلید خارجی هست که دیگه مشکلی تو فراخوانی نداشته باشم

ولی بازم ممنون میشم اگه اساتید راهی بود که inner join یا دستورات مشابه همیشه برقرار باشه ممنون میشم بگن

Mahmoud.Afrad
چهارشنبه 26 تیر 1392, 19:55 عصر
سوال رو ناقص طرح کردی.
ساختار جداول رو بزار و بگو دقیقا چه ستونهایی رو در کوئری نیاز داری. ارتباط جداول رو هم بگو.