سؤال

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

SELECT * FROM team 
WHERE team_id IN (
                  SELECT team_id 
                  FROM (
                        SELECT team.team_id, (
                                              SELECT COUNT(*) 
                                              FROM signup 
                                              WHERE signup.team_id = team.team_id
                                             ) AS members 
                        FROM team, schedule, event 
                        WHERE team.schedule_id = schedule.schedule_id 
                        AND schedule.event_id = event.event_id
                        AND event.event_id =183) AS t 
                  WHERE members = 0
                 )
هل كانت مفيدة؟

المحلول

نظرة سريعة على هذا الاستعلام تعطيني ما يلي:

select
    t.*
from
    team t
    inner join schedule s on t.schedule_id = s.schedule_id
    inner join event e on s.event_id = e.event_id
    left outer join signup sp on t.team_id = sp.team_id
where
    e.event_id = 183
    and sp.team_id is null

يبدو أنك تحاول العثور على جميع الفرق المشاركة في حدث ما ولكنها ليست في جدول الاشتراك.هل هذا دقيق؟

أيضًا، أردت أن أشير إلى أنه سيكون من الأسرع إجراء عمليات الانضمام ثم مجموعة من الاستعلامات الفرعية، خاصة إذا كانت الاستعلامات الفرعية تعتمد على كل صف (في حالتك، فهي تفعل ذلك).

هتافات،
اريك

نصائح أخرى

وتعليقا على الاستعلام اريك في هذا الموضوع، أود أن أوصي (من خلفيتي MSSQLSERVER) لاستخدام الاختيار الوجودي بدلا من ذلك. القيام بذلك (1) يجعل نيتك أكثر وضوحا و(2) يعطي محسن الفرصة لوقف دراسة لteam_id مطابقة بعد العثور على أول واحد (منذ> = 1 الصف مطابقة يتسبب في الاختيار وجوديا على أنها كاذبة). منها مثلا.

وحدد     ر. * من عند     فريق ر     انضمام الداخلية الجدول الزمني الصورة على t.schedule_id = s.schedule_id     انضمام الداخلية الإلكترونية الحدث على s.event_id = e.event_id أين     e.event_id = 183     وليس موجودا (حدد * من الاشتراك فيها team_id = t.team_id)

ولكن ربما هناك تحديدا الخلية الأداء الإقتصادي الأداء المخاوف.

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