2017-02-02 8 views
0

私は、すべての従業員、職種、および特定の日に行ったすべての仕事の合計費用をリストするmysql照会を作成しようとしています。MYSQL特定の日付の全従業員の費用の合計

job_function table 
emp_func 
emp_num 


employee table 
emp_name 
emp_num 

job table 
job_date 
emp_num 
job_name 

job_type table 
cost 
job_name 

クエリは、特定の日の仕事をしていた従業員のみを返すという点を除き、機能します。その日に従業員に仕事がなかった場合、彼らは現れません。私はすべての従業員を表示する必要があります。どのようにそれを行うための任意の提案?ここに私のクエリは次のとおりです。

SELECT 
employee.emp_name, 
job_function,emp_func, 
SUM(job_type.cost) 
FROM 
employee 
INNER JOIN job ON job.emp_num = employee.emp_num 
INNER JOIN job_function ON job_function.emp_num = employee.emp_num 
INNER JOIN job_type ON job.job_name = job_type.job_name 
where job_date = '2016-04-16' 
group by emp_name; 
+0

あなたはあなたの答えをここに見つけるべきです。 http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join –

+0

変更が必要なものが何かありますか?ちょうど参加?私はそれが合併問題かもしれないと思ったが、私はいくつかの試みを試みたが、それは私を近づけなかった。 'FULL OUTER JOIN'は、少なくとも私が使っている方法ではなく、MYSQLでも動作しないようです。 – user2328273

+0

私は2の代わりに4つのテーブルに参加しているので、ちょっと混乱しています。 – user2328273

答えて

0

のように間隔を置くために、あなたは削除する必要がありますleft joinonに適合する左結合テーブルに行がない場合でも結果を得ることができます。そのような場合、左に結合された表の列の値はnullとして返されます。

where - 条件をon - 条件に移動する必要もあります。 wherejob表記の日付を2016-04-16にする必要がありますので、存在する必要があります(nullではなく)。left joinjoinのように動作します。

SELECT 
    employee.emp_name, 
    job_function.emp_func, 
    SUM(job_type.cost) 
FROM employee 
JOIN job_function ON job_function.emp_num = employee.emp_num 
left JOIN job ON job.emp_num = employee.emp_num and job.job_date = '2016-04-16'  
left JOIN job_type ON job.job_name = job_type.job_name 
group by employee.emp_name, job_function.emp_func; 

私はまた、あなたのgroup byを固定し、その列を選択するので、そこemp_func - カラムを追加しました。そうしなければ、デフォルト設定でMySQL 5.7以降にエラーが発生し、それ以外の場合、従業員に複数の機能がある場合に間違った結果が得られる可能性があります。

+0

ああ、私は結合に 'AND'を使うことについて考えなかった。 – user2328273

0

あなたがその日で働く従業員だけを見ることができjob_date = '2016-04-16'を置く場合に必要WHEREすべての従業員を参照するか、job_date>'2016-04-16' AND job_date<'2016-05-31'

+0

右ですが、私は日付が必要です。私はどこの句がそれらの従業員を除外していることに気付いていますが、私はその従業員をどのように含めるかを把握し、日付を保持する必要があります。それは私が得たほど近いです。それは、その日のすべての従業員とその雇用の総費用を示すべきである。その日の従業員のための仕事がない場合、従業員を一切含まないのではなく、合計が0になるはずです。 – user2328273

+0

うわー、私は解決策を見つけることなくあなたの問題を考えています。それはちょっと難しいです。 –

+0

Lol、それは私だけではありません。 – user2328273

関連する問題