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

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


warning

Recommended Posts

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

لو فرضنا لدينا الجدول 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]



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

رابط هذا التعليق
شارك

السلام عليكم

اخي الكريم , لكي تتمكن من استرجاع المعلومات من اكثر من جدول واحد يجب ان يكون تصميم هذه الجداول صحيحا بمعنا ان يكون تصميم ال 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
السليمانيه - العراق

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...

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;
رابط هذا التعليق
شارك

  • بعد 3 أسابيع...
  • بعد 4 شهور...

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

أنا أؤيد رأي الأخ عبود وأرى أيضاً أن تكوين الثلاث جداول غير منطقي حيث أن البيانات تكاد تكوم متماثله في الثلاث جداول ولا يفرق بينهما إلا الحاله سواء كان مريض أو مسافر أو أياً كان. فالجدول الأول حسب كلامك به بيانات كل الموظفين سواء المرضى أو المسافرين أو أي حاله أخرى. ثم بعد ذلك تقوم بعمل جدول تحدد فيه الموظفين المرضى فقط والموجودين أساساًَ في الجدول الأول. وتقوم بإنشاء جدول آخر تكتب فيه الموظفين المسافرين والموجودين أيضاً في الجدول الأول ، أي أن الجداول الثاني والثالث ليسوا إلا حاله من الجدول الأول. في رأيي هذا خطأ منطقي وذلك للآتي:
أولاً: إذا نظرت بدقه إلي العلاقه بين الجدول الأول الثاني وبين الجدول الأول والثالث ستجد كلاهما علاقة 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);



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

رابط هذا التعليق
شارك

  • بعد 1 سنة...

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

رابط هذا التعليق
شارك

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


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

رابط هذا التعليق
شارك

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

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

اعرض اسم الموظف وإدارته والدرجة الوظيفية والعاملين بإدارتي المبيعات والحسابات


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

رابط هذا التعليق
شارك

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

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

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...
  • بعد 7 سنة...

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

انا عضو جديد

لوفرضنا ان معنا ثلاثة جداول وهي A ,B,D

والجدول A له عناصر كالتالي 1- رقمA   

2- اسم A

واريد وضع رقمA مفتاح اجنبي لـ الجدول B والجدول D

 كيف تتم العملية ... ارجو منكم التعاون

ولكم جزيل الشكر....

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية