0

SQL Serverクエリがあります:

(
    SELECT k12_dms_contacts_institution_jobtitles.job_title_id AS id
    FROM   k12_dms_contacts_institution_jobtitles
            INNER JOIN k12_dms_institution_master  ON  k12_dms_institution_master.id = k12_dms_contacts_institution_jobtitles.inst_id
    WHERE   (
                k12_dms_institution_master.state_id='63'
                AND k12_dms_contacts_institution_jobtitles.glevel_id='1'
            )
    GROUP BY
             k12_dms_contacts_institution_jobtitles.job_title_id
) 
INTERSECT 
(
    SELECT k12_dms_contacts_institution_jobtitles.job_title_id AS id
    FROM   k12_dms_contacts_institution_jobtitles
            INNER JOIN k12_dms_institution_master  ON  k12_dms_institution_master.id = k12_dms_contacts_institution_jobtitles.inst_id
    WHERE   (
                k12_dms_institution_master.state_id='63'
                AND k12_dms_contacts_institution_jobtitles.glevel_id='2'
            )
    GROUP BY
             k12_dms_contacts_institution_jobtitles.job_title_id
) 
INTERSECT 
(
    SELECT k12_dms_contacts_institution_jobtitles.job_title_id AS id
    FROM   k12_dms_contacts_institution_jobtitles
            INNER JOIN k12_dms_institution_master  ON  k12_dms_institution_master.id = k12_dms_contacts_institution_jobtitles.inst_id
    WHERE   (
                k12_dms_institution_master.state_id='63'
                AND k12_dms_contacts_institution_jobtitles.glevel_id='3'
            )
    GROUP BY
             k12_dms_contacts_institution_jobtitles.job_title_id
) 
INTERSECT 
(
    SELECT k12_dms_contacts_institution_jobtitles.job_title_id AS id
    FROM   k12_dms_contacts_institution_jobtitles
            INNER JOIN k12_dms_institution_master  ON  k12_dms_institution_master.id = k12_dms_contacts_institution_jobtitles.inst_id
    WHERE   (
                k12_dms_institution_master.state_id='63'
                AND k12_dms_contacts_institution_jobtitles.glevel_id='4'
            )
    GROUP BY
             k12_dms_contacts_institution_jobtitles.job_title_id
) 

上記のクエリを最適化する方法はありますか。交差はWhere句に基づいてのみ必要です。すべてのグレードレベルに共通するすべての役職を取得したいと思います。

4

2 に答える 2

1

次のように、クエリをより簡潔にすることができます。

SELECT IJT.job_title_id AS id
FROM k12_dms_contacts_institution_jobtitles AS IJT
INNER JOIN k12_dms_institution_master AS IM
ON IM.id = IJT.inst_id
WHERE IM.state_id='63'
AND IJT.glevel_id IN ('1', '2', '3', '4')
GROUP BY IJT.job_title_id
HAVING COUNT(DISTINCT IJT.glevel_id) = 4
于 2012-06-27T06:56:03.643 に答える
0

これはあなたが探しているものですか。(未テスト)

 SELECT k12_dms_contacts_institution_jobtitles.job_title_id AS id
    FROM   k12_dms_contacts_institution_jobtitles
            INNER JOIN k12_dms_institution_master  ON  k12_dms_institution_master.id = k12_dms_contacts_institution_jobtitles.inst_id
    WHERE   (
                k12_dms_institution_master.state_id='63'
                AND (select count( disctinct k12_dms_contacts_institution_jobtitles.glevel_id) from k12_dms_contacts_institution_jobtitles where k12_dms_contacts_institution_jobtitles.glevel_id in ('1','2','3','4')) = 4
            )
    GROUP BY
             k12_dms_contacts_institution_jobtitles.job_title_id
于 2012-06-27T07:00:11.890 に答える