سؤال

يحتوي الجدول - الاستعلام على عمودين (وظيفة ، depfunctionId)

أريد جميع القيم إما في وظيفة أو في depfunctionId

أنا أستخدم هذا:

select distinct depfunctionid from Query
union 
select distinct functionid from Query

كيف تفعل ذلك بشكل أفضل؟

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

المحلول

أعتقد أن هذا أفضل ما ستحصل عليه.

نصائح أخرى

هذا جيد كما يحصل على ما أعتقد ...

تفقد الجمل المتميزة ، حيث أن اتحادك (مقابل Union All) سوف يهتم بإزالة التكرارات.

البديل - ولكن ربما أقل وضوحًا وربما مع خطة التنفيذ نفسها - هو القيام بانضمام كامل عبر العمودان.

SELECT 
    COALESCE(Query1.FunctionId, Query2.DepFunctionId) as FunctionId
FROM Query as Query1
FULL OUTER JOIN Query as Query2 ON
    Query1.FunctionId = Query2.DepFunctionId

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

كل هذا يتوقف على مدى ثقل الاستعلام عن العرض المضمّن. المفتاح لتحسين perfomance هو التنفيذ مرة واحدة فقط ، ولكن هذا غير ممكن بالنظر إلى البيانات التي ترجعها.

إذا قمت بذلك مثل هذا:

select depfunctionid , functionid from Query
group by depfunctionid , functionid

من المحتمل جدًا أن تحصل على نتائج متكررة لـ DepunctionId أو FunctionId.

قد أكون مخطئًا ، لكن يبدو لي أنك تحاول استرداد شجرة من التبعيات. إذا كان هذا هو الحال ، فأنا شخصياً سأحاول استخدام نهج المسار الملموس.

إذا تم تخزين المسار الملمس في اسم جدول المرجع الذاتي ، فسأسترجع الشجرة باستخدام شيء مثل

select asrt2.function_id
from   a_self_referencig_table asrt1,
       a_self_referencig_table asrt2
where  asrt1.function_name = 'blah function'
and    asrt2.materialized_path like (asrt1.materialized_path || '%')
order  by asrt2.materialized_path, asrt2.some_child_node_ordering_column

هذا من شأنه أن يسترجع الشجرة بأكملها بالترتيب الصحيح. ما تمتص هو الاضطرار إلى بناء المسار الملمس بناءً على الدالة _id و parent_function_id (أو في حالتك ، وظيفة و depfunctionId) ، ولكن يمكن أن يعتني به الزناد بسهولة.

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