عرض أكثر من جداول متعددة تحتوي على نفس الأعمدة

StackOverflow https://stackoverflow.com/questions/352569

  •  20-08-2019
  •  | 
  •  

سؤال

ولدي أربعة الجداول التي تتضمن بالضبط نفس الأعمدة، وتريد إنشاء طريقة عرض على كل أربعة حتى أتمكن من الاستعلام معا.

هل هذا ممكن؟

و(لأسباب مملة لا أستطيع / أنا لم يسمح لهم الجمع بينهما، والتي من شأنها أن تجعل هذا غير ذي صلة!)

هل كانت مفيدة؟

المحلول

وعلى افتراض أنه بالإضافة إلى وجود أسماء الأعمدة نفسها، والأعمدة من نفس تحتوي على نفس البيانات، وتريد لإنشاء طريقة عرض الذي هو اتحاد كل هذه الجداول.

وشيء من هذا القبيل ما يلي يجب أن تعمل، ولكن لي SQL هو صدئ:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));

نصائح أخرى

قد يكون من المفيد الإشارة إلى أنك قد تحتاج إلى استخدام "اتحاد جميع" للحفاظ على الصفوف الفريدة التي قد تكون موجودة في أكثر من أحد الجداول. وهناك اتحاد القياسية إزالة التكرارات.

ومن الصعب أن نقول من الاستعلام الخاص بك سواء كنت تتوقع أن يتم إرجاع البيانات على أساس UNION، أو كطريقة عرض تحتوي على الأعمدة بتحفظ. هذا من الواضح تأثير.

والنظر في نموذج التالي:

TableA
ID  Name   RelatedID
1   John   2
2   Paul   1

TableB
ID  Name   RelatedID
1   Ringo  1
2   George 1

TableC
ID  Name  RelatedID
1   Bob   1

TableD
ID  Name  RelatedID
1   Kate  NULL

والآن، قم بتشغيل الاستعلام التالي مقابل هذا:

وSELECT ID، اسم من TableA UNION ALL ID SELECT، اسم من TableB UNION ALL ID SELECT، اسم من TableC UNION ALL ID SELECT، اسم من طرحه

وهذا يؤدي إلى الإخراج التالي:

1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate

هل هذا ما كنت بعد؟ إذا كان الأمر كذلك، يمكنك استخدام استعلام UNION.

والآن، إذا كان تأثير كنت بعد هو أن يكون لها رأي منفصلة من البيانات ذات الصلة، قد تحتاج إلى القيام بشيء من هذا القبيل:

SELECT A.ID MasterID, A.Name MasterName, 
       B.ID BandID, B.Name BandName, 
       C.ID BlackadderID, C.Name BlackadderName
       D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
  TableA A
INNER JOIN
  TableB B
ON
  A.RelatedID = B.ID
INNER JOIN
  TableC C
ON
  B.RelatedID = C.ID
INNER JOIN
  TableD D
ON
  C.RelatedID = D.ID

وهذا سوف يؤدي إلى العرض التالي من البيانات:

MasterID  MasterName  BandID  BandName BlackAdderID BlackAdderName  BlackadderRealID  BlackadderRealName
1         John        2       George   1            Bob             1                 Kate
2         Paul        1       Ringo    1            Bob             1                 Kate

استخدم الاتحاد. هنا هو تفسير

استخدم البيان اتحاد

select * from table1
union 
select * from table2
union
select * from table3

ويمكنك إذا كنت نقابة لهم (أود أن أقترح بما في ذلك بعض المؤشرات على النحو الذي الجدول وجاءت كل سجل من):

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..

وبدلا من UNION، واستخدام UNION ALL، إلا إذا كنت تريد تحديدا الصفوف المكررة إلى أن تستثنى. UNION من تلقاء نفسها وقتا أطول لتنفيذ (لأن من هذا القبيل هو الحال للعثور على المغفلين)، ويزيل الصفوف المكررة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top