結合テーブルに基づく条件を使用して行をフィルタリングする最適な方法を見つけることを試みています。一例として、私は従業員と給与等級テーブルを各従業員の給与等級に基づいて加入しています。それで、特定の従業員と同じグレードの従業員だけを見せたい(ブレイク)。私は次のコードを使用しました:結合テーブルのWHERE句を使用する
SELECT e.ename, e.sal, sg.grade
FROM emp e JOIN salgrade sg
ON(e.sal BETWEEN sg.losal AND sg.hisal)
WHERE sg.grade = (SELECT sg.grade FROM emp e JOIN salgrade sg ON(e.sal BETWEEN sg.losal AND sg.hisal) WHERE e.ename = 'BLAKE')
ORDER BY e.sal DESC
クエリを書くための最適な方法はありますか?
SELECT es.*
FROM (SELECT e.ename, e.sal, sg.grade,
MAX(CASE WHEN e.ename = 'BLAKE' THEN sg.grade END) OVER() as blake_grade
FROM emp e JOIN
salgrade sg
ON e.sal BETWEEN sg.losal AND sg.hisal
) es
WHERE grade = blake_grade
ORDER BY e.sal DESC;
あなたはどのようなデータベースシステムを使用しているの? SQL Server、Oracle、MySQL? –
私はOracleを使用しています* –
両方のテーブルのサンプルデータをご覧ください。 – VDK