إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

ارجو توضيح كيفية ربط ثلاث جداول ؟


15 رد (ردود) على هذا الموضوع

#1 warning

warning

    مشترك

  • الأعضــاء
  • 86 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 24 October 2007 - 08:11 AM

السلام عليكم ورحمة الله وبركاته

لو فرضنا لدينا الجدول a فيه جميع الموظفين وارقامهم واسمائهم
والجدول b فيه ارقام الموظفين المرضى
والجدول c فيه ارقام الموظفين المسافرين

ونريد استعلام يظهر اسماء الموظفين المرضى والمسافرين , كيف تتم عمليه الربط اذا اردنا الربط الي الجمله FORM ؟

مثلا انا حاولت كالتالي
[left]
 select ................
FROM
(
b FULL OUTER JOIN c 
ON
b.employee_no=c.employee.no
)
LEFT OUTER JOIN a
ON
c.employee_no=a.employee_no[/left]

ولكن هذه الطريقة لم تنجح حيث انها اخرجت فقط اسماء الموظفين المسافرين

#2 interface

interface

    مشترك

  • الأعضــاء
  • 75 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 25 October 2007 - 09:58 PM

أن شاء الله اني اوفق الى الاجابة اصحيحة
select  number ,ename , dept,salary
from a,b,c
where a.number=b.ename 
and 
a.dept=c.salary;

الغرب تصنع طايرات وصواريخ ... وحنى في ماضينا نعيد النقاشي


#3 warning

warning

    مشترك

  • الأعضــاء
  • 86 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 30 October 2007 - 07:34 AM

لا اعتقد ان اجابتك من الممكن ان تعمل ياعزيزي , أرجو ممن لديه الحل اخبارنا
حتى ولو كان باستخدام اي طريقة ربط من where او غيره

#4 محمد570

محمد570

    عضو

  • الأعضــاء
  • 49 مشاركة

تاريخ المشاركة 30 October 2007 - 09:09 AM

السلام عليكم و رحمة الله و بركاته ..

جرب هذا الكود..

select a.emp_name
from a,b,c
where a.emp_id in 
( select b.emp_id from b,c where b.emp_id=c.emp_id);

أتمنى تكون الإجابة صحيحة ..
اللهم إني أسألك علماً نافعاً ، و رزقاً حلالاً طيباً ، و عملاً صالحاً متقبلاً ..

#5 عبود

عبود

    مشترك

  • الأعضــاء
  • 69 مشاركة

تاريخ المشاركة 30 October 2007 - 12:54 PM

السلام عليكم

اخي الكريم , لكي تتمكن من استرجاع المعلومات من اكثر من جدول واحد يجب ان يكون تصميم هذه الجداول صحيحا بمعنا ان يكون تصميم ال ERD مبني على اساس ربط الجداول بصوره منطقيه مع بعض باستخدام المفاتيح الاوليه والثانويه او PK and FK وبهذه الحاله تستطيع استرجاع المعلومات من الجداول من خلال استخدام شرط ربط صحيح وعاده يكون بصوره مساوه المفتاحين الاولي والثانوي في عباره ال where وهنالك قاعده عامه هو ان شروط الربط او ال join condition يجب ان تكون على الاقل n-1 من الجداول, على فرش ان n هي عدد الجداول المراد استرجاع المعلومات منها.

بالنسبه للمثال الذي تسال عنه فهو غير صحيح لان الجداول اصلا غير مكونه تكوين صحيح, يجب ان يكون هنالك جدول واحد لكل الموضفين مهما كانت حالتهم مسافرين او غير ذلك,

فيما يلي مثال ساقوم باسترجاع بيانات من 3 جداول

select employee_id, last_name, department_id, department_name, location_id
from employees, departments, locations
where employees.department_id = departments.department_id
and departments.department_id = locations.department_id

على اعتبار ان رقم الموظف واسمه ورقم القسم هي من جدول الموظفين واسم القسم هي من جدول الاقسام واسم الموقع هي من جدول المواقع

مع الشكر

علي غزاله
Oracle Developer
السليمانيه - العراق

#6 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 16 November 2007 - 09:29 AM

Creating Three-Way Joins with the ON Clause



SELECT employee_id, city, department_name
FROM   employees e 
JOIN   departments d
ON	 d.department_id = e.department_id 
JOIN   locations l
ON	 d.location_id = l.location_id;


#7 magboss

magboss

    عضو

  • الأعضــاء
  • 3 مشاركة

تاريخ المشاركة 03 December 2007 - 07:36 PM

ده كود ربط بين 3 جداول
جدول الموضفين مع الأدارات وجدول ترتيب المرتبات

select e.ename,e.sal,d.dname,s.grade
from emp e,dept d,salgrade s
where e.deptno=d.deptno and e.sal between losal and hisal;


#8 MSHEGYPT

MSHEGYPT

    عضو

  • الأعضــاء
  • 26 مشاركة

تاريخ المشاركة 27 April 2008 - 06:26 PM

اعتقد ان الحل الصحيح هو :-

select a.name
from a join b on a.id = b.id

join c on a.id = c.id


سبحان الله وبحمده سبحان الله العظيم[color=#CC0000][b]

#9 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 01 May 2008 - 08:01 PM

السلام عليكم.

أنا أؤيد رأي الأخ عبود وأرى أيضاً أن تكوين الثلاث جداول غير منطقي حيث أن البيانات تكاد تكوم متماثله في الثلاث جداول ولا يفرق بينهما إلا الحاله سواء كان مريض أو مسافر أو أياً كان. فالجدول الأول حسب كلامك به بيانات كل الموظفين سواء المرضى أو المسافرين أو أي حاله أخرى. ثم بعد ذلك تقوم بعمل جدول تحدد فيه الموظفين المرضى فقط والموجودين أساساًَ في الجدول الأول. وتقوم بإنشاء جدول آخر تكتب فيه الموظفين المسافرين والموجودين أيضاً في الجدول الأول ، أي أن الجداول الثاني والثالث ليسوا إلا حاله من الجدول الأول. في رأيي هذا خطأ منطقي وذلك للآتي:
أولاً: إذا نظرت بدقه إلي العلاقه بين الجدول الأول الثاني وبين الجدول الأول والثالث ستجد كلاهما علاقة one to one وهذه العلاقه غالباً ما يتم حلها بدمج علاقة الجدولين في جدول واحد ويتم التمييز بينهما بإنشاء عمود آخر للتمييز بين بيانات كلا الجدولين(في حالتك تضيف عمود وتسميه الحاله وتحدد سواء مريض او مسافر أو أياً كان). في حالات نادره نستعين بعلاقة one to one ولكن حالتك هذه لا تحتاجها.

ثانياً: إنشاء جداول بهذا الشكل يصعب عملية الصيانه والتطوير مستقبلياً.

إن إنشاء جداول البيانات بهذا الشكل يصعب عليك عملية الإستعلام والتعامل مع البيانات وأظن أنك واجهتها الآن. إن ال ERD الناجح والمنطقي يسهل عملية ال Data Flow وبذلك تسهل عملية الصيانه والمتابعه للبرنامج وكذلك التطوير به.

أما إذا كان لابد من تواجد الجداول بهذا الشكل فجملة الإستعلام تكون كالآتي:

SELECT employee_id
FROM a
WHERE EXISTS
  (SELECT employee_id
   FROM B
   UNION
   SELECT employee_id
   FROM C);

بالتوفيق والنجاح...

أحمد يحيى


Oracle Apps Senior Technical Consultant


#10 الكونت

الكونت

    عضو

  • الأعضــاء
  • 49 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 27 July 2009 - 10:56 AM

اخي اعمل فيو تجمع فيه بين جدولين
وبعدين اجمع بين الفيو والجدول الثالث
ان شاء الله تزبط
تقبل احترامي

Avec mes meilleurs vœux de succès


#11 midosta

midosta

    عضو

  • الأعضــاء
  • 6 مشاركة

تاريخ المشاركة 27 July 2009 - 01:56 PM

select employee_id, last_name, department_id, department_name, location_id
from employees, departments, locations
where employees.department_id = departments.department_id and departments.department_id = locations.department_id

هذا الجواب الصحيح..
شكرا لكاتبه

#12 midosta

midosta

    عضو

  • الأعضــاء
  • 6 مشاركة

تاريخ المشاركة 27 July 2009 - 01:59 PM

SELECT employee_id, city, department_name
FROM employees e
JOIN departments d ON d.department_id = e.department_id
JOIN locations l ON d.location_id = l.location_id;
ودي كمان صح

#13 sho_7222

sho_7222

    عضو مميز

  • الأعضــاء
  • 501 مشاركة
  • الاسم الأول:DR/ASHRAF.
  • اسم العائلة:FATHY
  • البـلـد: Country Flag
  • الاهتمامات:البحث العلمي في مجال تكنولوجياالتعليم الكتروني والتدريب T.o.T ومدقق خارجي لمعايير الجودة العالمية.
    والبرمجة :(,developer,Apps,Jdeveloper,DBA,BI,lienex,java,VB.NET)
  • المنصب الحالي:مستشار بمركز البرمجة بوزار ةالتربية والتعليم

تاريخ المشاركة 28 July 2009 - 04:07 PM

يااخوان لازم نفرق بين استعراض او استخراج البيانات من ثلاث جداول والربط بين الجداول في تصميم الجداول

اذا كان الغرض هو استخراج البيانات من الجداول الثلاثه فهي كما في العلاقات الغير متساوية
اعرض اسم الموظف وإدارته والدرجة الوظيفية والعاملين بإدارتي المبيعات والحسابات

SELECT ENAME,GRADE,DNAME
FROM EMP E,SALGRADE S,DEPT D
WHERE E.DEPTNO=D.DEPTNO AND SAL BETWEEN LOSAL AND HISAL AND DNAME IN('ACCOUNTING','SALES') ;


اما اذا كان الربط بين ثلاث جداول فيكون مثلا عندنا شاشه فيه الدول المحافظات المدن والاحياء
-- REGION  (Table) جدول المدن 
--
CREATE TABLE OMAR.REGION
(
COD NUMBER,
ENAME VARCHAR2(25 BYTE),
COUNT_COD NUMBER,
CONSTRAINT REGION_COD_PK
PRIMARY KEY
(COD),
CONSTRAINT REGION_COUNT_COD_FK
FOREIGN KEY (COUNT_COD)
REFERENCES OMAR.COUNTRY (COD) ON DELETE CASCADE
);

--
-- AREA (Table) جدول الاحياء
--
CREATE TABLE OMAR.AREA
(
COD NUMBER,
ENAME VARCHAR2(25 BYTE),
COUNT_COD NUMBER,
REG_COD NUMBER,
CONSTRAINT AREA_COUNT_COD_FK1
FOREIGN KEY (COUNT_COD)
REFERENCES OMAR.COUNTRY (COD) ON DELETE CASCADE,
CONSTRAINT AREA_REG_COD_FK2
FOREIGN KEY (REG_COD)
REFERENCES OMAR.REGION (COD) ON DELETE CASCADE
);
-- COUNTRY (Table) جدول الدول
--
CREATE TABLE OMAR.COUNTRY
(
COD NUMBER,
ENAME VARCHAR2(25 BYTE),
CONSTRAINT COUNTRY_COD_PK
PRIMARY KEY
(COD)
);

ملفات مرفقة

  • ملف مرفق  _______.doc   123كيلو   62 عدد مرات التحميل

(رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء ، رب اغفر لي ولوالدي وللمؤمنين يوم يقوم الحساب)


مستشار مركز جودة البرمجة بوزارة التربية والتعليم

 

استاذ مساعد تكنولوجيا تعليم

 

dr.ashraf.fathy@hotmail.com


00201099020210

 


#14 mohamed_shoair

mohamed_shoair

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • الاسم الأول:Mohamed
  • اسم العائلة:Shoair
  • البـلـد: Country Flag
  • الاهتمامات:volley ball

تاريخ المشاركة 30 July 2009 - 11:57 AM

أنا مع رأي الأخ الكونت
إنك تعمل فيو تربط فيها بين جدولين ، بس تاخد بالك من حاجة :

الفيو والجدول الثالث اللي هتربط بينهم يكون بينهم عمود مشترك
يعني في واحد برايماري ويكون في التاني فورين كي
يعني ببساطة هو الإيكو جوين وهو أسهل طريقة للربط


=============================================================

كان الله في عون العبد مادام العبد في عون أخيه


Email : asdnova@yahoo.com

BBM : 2AB34745

 

 


#15 Syrian Oracle

Syrian Oracle

    مشترك

  • الأعضــاء
  • 170 مشاركة

تاريخ المشاركة 04 August 2009 - 03:40 PM

SELECT E.NAME
FROM EMPLOYEE E, SICK S ,TRAVELLER T
WHERE E.EMPNO = S.EMPNO OR E.EMPNO = T.EMPNO ;