2017-10-04 2 views
0

シンプルなデータベーススキーマです。スキーマによれば、全従業員の中で最高の給与を見つけ、その従業員に関する情報(a_id、a_name、 b_area)。SQLを使用して4つのテーブルを結合して結果を得るにはどうすればいいですか

テーブルDから結果が1つだけ返され、他のテーブルとリンクするためにemploy_idを返そうとしますが、1つ以上の結果が返されます。下に、どうもありがとうございました、私のクエリを確認してください:) enter image description here

SELECT 
    a.a_id, 
    a.a_name, 
    b.b_area 
FROM 
    A a, B b, C c 
LEFT JOIN (SELECT d.employee_id, MAX(d.salary) FROM D d) 
    ON d.employee_id= c.employee_id; 

答えて

0

あなたは、あなたのテーブルの結合条件を欠場。これはあなたが必要とするものを行うはずです。

サブセレクト・ソリューション:

SELECT A.a_name 
     ,B.b_area 
     ,maxsalary.MaxSal 
    FROM 
     (
     SELECT D.employee_id 
       ,MAX(D.Salary) as MaxSal 
      FROM D 
     GROUP BY D.employee 
    ) maxsalary 
    INNER JOIN C 
      ON C.employee_id = maxsalary.employee_id 
    INNER JOIN B 
      ON C.b_id = B.b_id 
    INNER JOIN A 
      ON C.a_id = A.a_id 

このソリューションは、よりパフォーマンスかもしれない

SELECT a.a_id, a.a_name, b.b_area 
FROM C 
JOIN A ON a.a_id = c.a_id 
JOIN B ON b.b_id = c.c_id 
JOIN D ON d.employee_id = c.employee_id  
WHERE d.salary = (SELECT max(salary) FROM D) 
+0

最高給与に条件を追加すると、 'd.salary =(SELECT max(salary)FROM D WHERE xxx = yyy);でしょうか? @RadimBača –

0

はいくつかの方法があります。 SUBSELECT maxsalaryは1行だけを返します。

1

Dとのスタートに、必要に応じて、他のテーブルを結合:

... D left join c on (d.employee_id = c.employee_id) left join a on ... 

と最高給与のビットは次のようになります:

... where salary = (select max(salary) from d) 

場合、これは複数の結果を返すことに注意してください最高給与を持つ複数の従業員がいます。

+0

もし私が最大の給料(昨年と今年の給与の比較です: 'MAX(L_SALARY - N_SALARY) ')を探したいのですが? –

+0

あなたの質問には、そのデータがモデルに含まれていないので、それに関するアドバイスはありません。おそらくそれは別の質問ですか? –

+0

実際にスキーマはテーブルDの下でL_SALARY(去年の給与)とN_SALARY(今年の給与)の列を持っています –

0

私はこの意志出力1行として

SELECT a.a_id, a.a_name, b.b_area FROM A a, B b, C c LEFT JOIN D d ON c.employee_id = d.employee_id 
GROUP BY d.salary 
HAVING MAX(d.salary); 
0
SELECT D.*, a.a_name, b.b_area FROM D 
LEFT JOIN c ON d.employee_id = c.employee_id 
LEFT JOIN a ON a.a_id = c.a_id 
LEFT JOIN b ON b.b_id = c.a_id 
ORDER BY D.salary DESC LIMIT 1 

、あなたが句をHAVING使用思う:
EMPLOYEE_ID |給料| a_name | b_area

+0

最大の給料(昨年と今年の給与の比較:MAX(L_SALARY - N_SALARY))を探したい場合はどうすればいいですか? –

関連する問題