0

次の SQL ステートメントがあり、300 人の従業員がいるにもかかわらず、2 つのレコードしか返されません。私が間違っている可能性があることを誰かが見ていますか?

SELECT     Employees.[Employee ID], 
Employees.Employee, 
Employees.[First Name], 
Employees.[Middle Name], 
Employees.[Last Name], 
Employees.Position,
[Work].[Work ID]
FROM  Employees LEFT JOIN
[Work] ON Employees.[Employee ID] = [Work].[Employee ID]
WHERE [Work].[Work Date] = '06-13-2012'
4

4 に答える 4

3

外部テーブルで外部結合フィルターを使用する場合は、ON 句で適用する必要があります。そうしないと、効果的に内部結合が取得されます。

SELECT     
    Employees.[Employee ID], 
    Employees.Employee, 
    Employees.[First Name], 
    Employees.[Middle Name], 
    Employees.[Last Name], 
    Employees.Position,
    [Work].[Work ID]
FROM  Employees 
LEFT JOIN [Work] 
  ON Employees.[Employee ID] = [Work].[Employee ID]
 AND [Work].[Work Date] = '06-13-2012'
于 2012-06-12T09:07:42.540 に答える
2

すべての従業員が必要な場合は、次のようなものを探している可能性があります。

SELECT     Employees.[Employee ID],  ...
FROM  Employees LEFT JOIN 
[Work] ON Employees.[Employee ID] = [Work].[Employee ID] 
AND [Work].[Work Date] = '20120613' 

また、yyyyMMdd などの明確な日付形式を使用する必要があることにも注意してください。

于 2012-06-12T09:08:36.753 に答える
0

Where 句の日付を確認しましたか?

日時に変換してみるか、[Work].[Work Date] 列のデータに時間/分/秒が定義されていないかどうかを確認してください。

結合を削除して、どこに問題があるかを確認してください。

SELECT [Work].[Employee ID], [Work].[Work ID]
FROM [Work]
WHERE [Work].[Work Date] = '06-13-2012'

このようなレコードをいくつ持っていますか? すべての従業員 ID が Employees テーブルの ID と一致していますか?

すべての従業員が必要な場合は、LEFT OUTER JOIN を実行する必要があります。

SELECT     Employees.[Employee ID], 
Employees.Employee, 
Employees.[First Name], 
Employees.[Middle Name], 
Employees.[Last Name], 
Employees.Position,
[Work].[Work ID]
FROM  Employees LEFT OUTER JOIN
[Work] ON Employees.[Employee ID] = [Work].[Employee ID]
AND [Work].[Work Date] = '06-13-2012'

これは、あなたの望むことですか?

于 2012-06-12T08:58:20.563 に答える
0

[Work Date] 列も確認してみてください。時間の部分 (DateTime データ型) もある場合は、それを考慮する必要があります。

SELECT     
    Employees.[Employee ID], 
    Employees.Employee, 
    Employees.[First Name], 
    Employees.[Middle Name], 
    Employees.[Last Name], 
    Employees.Position,
    [Work].[Work ID]
FROM  Employees 
LEFT JOIN [Work] 
  ON Employees.[Employee ID] = [Work].[Employee ID]
WHERE Convert(Char(10), [Work].[Work Date], 120) = '2012-06-13' -- can find better way
于 2012-06-12T14:59:44.540 に答える