PDA

View Full Version : کوئری گرفتن از جداول متصل به هم



sepehrazimi
دوشنبه 01 تیر 1394, 16:49 عصر
سلام دوستان
من در mysql چند تا جدول دارم این جداول رو به هم متصل کردم(تصویر جداول رو ضمیمه کردم)
حالا برای select کردن فیلد ها باید چیکار کنم چون بعضی از جداول به هم متصل می باشد از چه دستوری استفاده کنم . با تشکر

jafaripur
دوشنبه 01 تیر 1394, 17:06 عصر
از join های Inner, Left, Righ
گاهی هم باید از sub query استفاده کنی.
حواست باشه کوئری بد بزنی سرعت بدجور میاد پایین. کوئری های Join خیلی حساس هستن.

sepehrazimi
دوشنبه 01 تیر 1394, 17:15 عصر
تفاوت right ، left ، inner در چیست ؟ ممنون

H:Shojaei
دوشنبه 01 تیر 1394, 20:47 عصر
وقتی 2 جدول رو join میکنید
select * from tblLeft (left||right||inner) join tblRight on ..........
تو این کوئری جدول tblLeft جدول اول هست و جدول tblRight جدول دوم هست که توضیحات به این اول و دوم اشاره شده منظور همین ها هستن...

inner سطر های هردو جدول رو میاره که معادل سطر در جداول تو جدول دیگه باشه یعنی هردو سطر معادل به هم رو داشته باشن مثلا اگر یک سطر توی جدول اول هست و id اون توی جدول دوم هم هست هردو جدول سطرشو میاره...

left میاد اول تمام سطر های جدولی که اول صدا زدین رو نگاه میکنه و هرکدوم معادلی توی جدول دوم داشت رو نشون میده (تو این مورد جدول دوم مهم نیست اگر سطری داشته باشه که توی جدول اول مقداری نداشته باشه دیگه اون سطر نشون داده نمیشه بر خلاف inner که این سطر رو هم میاورد)

right هم برعکس left عمل میکنه یعنی میاد اول جدول دومی رو نگاه میکنه و هر سطری از اون که سطر معادلی توی جدول اول داشته باشه رو join میکنه و نشون میده (اینجا هم به جدول اول کاری نداره اگر سطری داشته باشه که معادلی توی جدول دوم نداشته باشه اون سطر دیگه نشون داده نمیشه چون ملاک جدول سمت راستی یا دومیه)

sepehrazimi
سه شنبه 02 تیر 1394, 11:13 صبح
ممنون متوجه شدم چی به چیه . فقط برای insert کردن هم همچین دستوری هست که بتوانی رکورد اضافه کنم به جداول متصل به هم .

sepehrazimi
چهارشنبه 03 تیر 1394, 16:26 عصر
دوستان برای سوال بالا کسی نظری نداره

H:Shojaei
چهارشنبه 03 تیر 1394, 23:12 عصر
دلیلی برای درج با جوین نداره که این کار انجام بشه! چکار میخواید انجام بدین مگه؟

هادی2020
پنج شنبه 04 تیر 1394, 06:01 صبح
inner سطر های هردو جدول رو میاره چه معادل سطر در جداول تو جدول دیگه باشه چه نباشه مثلا اگر یک سطر توی جدول اول هست و id اون توی جدول دوم نباشه باز هم هردو جدول سطرشو میاره...

توضیح داده شده برای outer join هست. inner اشتراکات دو جدول رو میاره

sepehrazimi
پنج شنبه 04 تیر 1394, 12:12 عصر
توضیح داده شده برای outer join هست. inner اشتراکات دو جدول رو میاره
نه منظورم inner نیست insert کردن هست

H:Shojaei
پنج شنبه 04 تیر 1394, 13:46 عصر
توضیح داده شده برای outer join هست. inner اشتراکات دو جدول رو میاره
بله درسته ممنون...

sepehrazimi
دوشنبه 08 تیر 1394, 17:58 عصر
سلام دوستان
یک سوال در مورد تصویری که گذاشتم دارم . من میخوام یک رکورد از جدول usr_user پاک کنم ولی چون جداول به هم متصل هست باید از بقیه جداول هم حذف بشه مثلا usr_user ->usr_attorny ->nws_news و ... حالا دستوری هست که از جدول یوزر پاک کردم تمام رکورد های مرتبط در جداول دیگر با این رکورد پاک بشه . ممنون دوستان منتظر پاسخ هایتان هستم.

H:Shojaei
دوشنبه 08 تیر 1394, 21:46 عصر
وقتی مرتبط باشن همه خود به خود حذف میشن...
البته اگر اتصال با id منحصر به فرد انجام شده باشه و همچنین اتصالات درست باشه و موقع اتصال ایجاد کردید ondelete رو برای ویرایش جدول متصل شده به جدول اصلی ست کرده باشید...

sepehrazimi
سه شنبه 09 تیر 1394, 16:08 عصر
وقتی مرتبط باشن همه خود به خود حذف میشن...
البته اگر اتصال با id منحصر به فرد انجام شده باشه و همچنین اتصالات درست باشه و موقع اتصال ایجاد کردید ondelete رو برای ویرایش جدول متصل شده به جدول اصلی ست کرده باشید...
ممنون از پاسختون فقط الان چطوری می تونم ondelete رو برای جدول هام ست کنم؟میتونم ویرایش کنم ؟

vahidqara
سه شنبه 09 تیر 1394, 16:54 عصر
دوست خوب همه کار میتونی انجام بدی به شرطی که اطلاعات خودتو در مورد بانک اطلاعاتی و بخصوص روابط بین جدولها کاملتر کنی.