:SQLクエリには重複するWhere and On条件が含まれています - 目的があるのか、クエリが遅くなるのですか?私は、SQLクエリを編集して、おおよそ次のような部分に遭遇してい
SELECT
userAddress, employeeAddress, userSSNumber,
employeeSSNumber, customerSSNumber, userID, employeeWorkHours,
YTDHoursWorked, employeeHireDate
FROM
Users
LEFT OUTER JOIN
Customers ON customerSSNumber = userSSNumber
LEFT OUTER JOIN
(SELECT
employeeAddress AS Address,
ISNULL((SELECT SUM(employeeWorkHours)
FROM Employees AS TempLines
WHERE TempLines.employeeSSNumber = Employees.employeeSSNumber
AND Templines.employeeHireDate < Employees.employeeHireDate), 0) AS YTDHoursWorked
FROM
Employees) AS Records ON employeeAddress = Address
私は部品
where TempLines.employeeSSNumber= Employees.employeeSSNumber
と
on employeeAddress = Address
が完全に冗長であると思われます。私が正しく理解していれば、彼らは値をそれ自体と比較しているだけです。そして、それらのビットを削除すれば、クエリは同じ結果を返します - そうですか?
そして、
Templines.employeeHireDate < Employees.employeeHireDate
部分は、ネストされた、最もまったく結果を返さない場合に選択し、右側の原因になりますか?
私の例では一貫性のない大文字と、表のデザインと命名規則が貧弱であることをお許しください。これらの可能性のある冗長部分の多くのために実際のクエリははるかに長いです。これらの命名規則を使用しており、テーブルやフィールドを変更することはできません。この質問の一部は、ページ長のクエリを数時間見た後の健全性チェックです。
データベースエンジンのタグとバージョンを常に指定してください – FLICKER
このクエリでは何を想定していますか?従業員が雇用されるまでの総勤務時間を見つけるように見えます! "employeeAddress = Address"の条件を結合すると疑わしいように見えます。なぜSSNのキーフィールドに参加していないのですか? – FLICKER
このクエリは、Crystal Reportsの1つのレポートに使用されるいくつかのフィールドを収集するために使用されます。このクエリは、6つのテーブルから約30のフィールドを収集し、それらのいくつかを合計し、それらをCrystal Reportsが分析する単一のテーブルに配置します。 私の先任者および/またはERPメーカーは、Crystal ReportsのSQLクエリを手動で書き込むことに決めました。それはCrystal Reportsが(私が知る限り)使用されるはずのものではありませんが、それが彼らのやり方です。私が何かを見落とし、誰もエラーをキャッチしなければ、それは従業員の手数料を変更したり、人事(つまり、終了)を変更します。 – user3685427