سؤال

هذه هي محاولتي الأولى للإجابة على سؤالي، حيث قد يواجه شخص ما هذا الأمر وقد يكون مفيدًا.باستخدام Firebird، أريد دمج نتائج استعلامين باستخدام UNION ALL، ثم فرز المخرجات الناتجة في عمود معين.شيء مثل:

(select C1, C2, C3 from T1)
union all 
(select C1, C2, C3 from T2)
order by C3

جاءت الأقواس من بناء جملة صالح لقواعد بيانات أخرى، وهي ضرورية للتأكد من أن الوسائط الخاصة بـ UNION ALL (عملية تم تعريفها للعمل على الجداول - أي.ان غير مرتبة مجموعة السجلات) لا تحاول أن يتم طلبها بشكل فردي.ومع ذلك، لم أتمكن من تشغيل بناء الجملة هذا في Firebird - كيف يمكن القيام بذلك؟

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

المحلول

SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3

نصائح أخرى

ليس مطلوبا

وأسماء الحقول لتكون على قدم المساواة. لهذا السبب لا يمكنك استخدام اسم الحقل في النظام من قبل.
تستطيع استخدام الفهرس المجال بدلا من ذلك. كما في:

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  

وماذا عن:

select C1, C2, C3 from T1
union all 
select C1, C2, C3 from T2
order by 2

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

في فايربيرد 1.5 يعمل هذا بالنسبة لي

create view V1 (C1, C2, C3) as
  select C1, C2, C3 from T1
  union all 
  select C1, C2, C3 from T2

ثم

select C1, C2, C3 from V1 order by C3

ونفذ UNION ALL في طريقة عرض (بدون جملة ORDER BY)، ثم حدد من طريقة العرض باستخدام ORDER BY.

متحرك order by في ذيل الاستعلام لديه لا تأثير لإخراج datagrid.

select * from (
    select first 1
        C1
    from T1
    order by id desc
)
union all
select * from (
    select first 1
        C1
    from T2
    order by id desc
)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top