2017-09-23 26 views
0

メインクエリに2つのテーブルを結合する方法がわかりません。 accountnumberを決定する2つのテーブルは、異なる状況のために3つのメインテーブルのそれぞれに参加します。MYSQL大きな左外部結合または3左外部結合同じテーブル?

私は3つの事柄に基づいて口座番号を決定しようとしています。 アカウント番号は、3つの異なるテーブルである支払いコード、部門および従業員タイプに基づいています。

ここでは、どのように参加する必要がありますか。

/* all accountnumbers have a paycode_id*/ 
accountcodes.paycode_id = employee_pay.id 
/* all accountnumbers are assigned to either a certain department or all*/ 
accountcodes.department_code = department.code 
/* the accountnumber can be assigned to one emp_type or both*/ 
accountcodes.emp_type_id = employee_infos.emp_type_id 
/* the accountnumber is in table:lkp_accountcodes, that determines the account number table:accountcodes */ 
accountcodes.lkp_accountcodes_id = lkp_accountcodes.id 

表:私は左が参加し3をやってする必要がある場合、私は一時テーブルを作成し、知らない

----------------------------------- 
| id | company_id | accountnumber | 
|-----|------------|----------------| 
| 21 | 500  |  5210  | 
| 22 | 500  |  6210  | 
| 23 | 500  |  2211  | 
| 24 | 500  |  2210  | 
| 25 | 500  |  5010  | 
| 26 | 500  |  6000  | 
| 27 | 500  |  5090  | 
----------------------------------- 

lkp_accountcodes、または1つの大きな左外側:

----------------------------------------------------------------------- 
| ID | lkp_accountcodes_id | paycode_id | department_code | emp_type_id | 
|--------------------------|------------|-----------------|-------------| 
| 1 |   21  |  15 |   120  |  1  | 
| 2 |   22  |  15 |   310  |  1  | 
| 3 |   23  |  30 |   null |  1  | 
| 4 |   24  |  30 |   null |  2  | 
| 5 |   25  |  55 |   120  |  1  | 
| 6 |   26  |  55 |   310  |  2  | 
| 7 |   27  |  55 |   120  |  2  | 
----------------------------------------------------------------------- 

テーブルをaccountcodes下のように参加しますか? また、私はそれをどのようにグループ化するのか分かりません。また、departentコードがnullの場合、accountnumberはpaycode_idとemp_type_idによって決定される必要があります。 以下のクエリで私を助けてください。

SELECT i.employee, d.department, e1.paycode, a1.accountnumber 
    FROM employee_pay e1 
    INNER JOIN employee_infos i ON e1.emp_info_id = i.id 
    INNER JOIN department d ON i.department_id = d.id 
    LEFT OUTER JOIN accountcodes ac ON ac.paycode_id = e1.id 
     AND ac.emp_type_id = i.emp_type_id 
     AND ac.department_code = d.code -- if null? 
    LEFT OUTER JOIN lkp_accountcodes lgc on gp.lkp_gl_code_id = lgc.id 
    -- group? 

期待される結果

emp_number | emp_type | deptartment | pay_code | account_number 
123  | temp  | 120   | CPP Ded | 5210 
456  | reg  | 310   | CPP Ded | 6210 
789  | temp  | null  | ExpReim | 2210 
987  | reg  | null  | ExpReim | 2211 
654  | reg  | 145   | StatHol | 5010 
321  | temp  | 145   | StatHol | 5090 
333  | temp  | 532   | StatHol | 6000 
+1

を使用する必要があり、関数を凝集していないという事実は、あなたの質問を更新しexpetced結果を追加してくださいしてください – scaisEdge

+0

@scaisEdgeは –

答えて

0

これは大丈夫でなければなりません。

SELECT i.employee, d.department, e1.paycode, a1.accountnumber 
    FROM employee_pay e1 
    JOIN employee_infos i ON e1.emp_info_id = i.id 
    JOIN department d ON i.department_id = d.id 
    JOIN accountcodes ac ON ac.paycode_id = e1.id 
     AND ac.emp_type_id = i.emp_type_id 
     AND ac.department_code = d.code -- if null? 
    LEFT OUTER JOIN lkp_accountcodes lgc on gp.lkp_gl_code_id = lgc.id; 
+0

何を追加しましたグループ化について?彼らの部門がヌルならば? –

0

あなたがあなたの代わりにGROUP BYの重複行を避けたい場合は、DISTINCT

SELECT DISTINCT i.employee, d.department, e1.paycode, a1.accountnumber 
    FROM employee_pay e1 
    INNER JOIN employee_infos i ON e1.emp_info_id = i.id 
    INNER JOIN department d ON i.department_id = d.id 
    LEFT JOIN accountcodes ac ON ac.paycode_id = e1.id 
      AND ac.emp_type_id = i.emp_type_id 
      AND ac.department_code = d.code 
    LEFT JOIN lkp_accountcodes lgc on gp.lkp_gl_code_id = lgc.id 
関連する問題