2016-06-28 15 views
0

これは私が取り組んでいる課題の一部です。 私は6つのテーブル複数のテーブルからデータを選択し、mysqlでグルーピングする

  • EMPLOYEE
  • DEPARTMENTS
  • DEPT_EMP
  • TITLES
  • SALARIES
  • DEPT_MANAGER
がある COMPANYという名前のデータベースを、持っています

ここで、各部門のエンジニアの数をリストアップする必要があります。

私は次のクエリを思い付いた:

select departments.dept_name as Department_name, 
     count(titles.title) as No_Of_Engineers 
from departments, 
    titles 
where titles.emp_no = dept_emp.emp_no 
    and dept_emp.dept_no = departments.dept_no 
    and titles.title like "% engineer %" 
group by departments.dept_no; 

しかし、 'where句'

で、これは私にエラーを与える

不明な列 'dept_emp.emp_no' しかし、私のdept_empテーブルにはemp_noという名前の列があります。 誰でもこのエラーを見ることができますか?あなたがdept_empに参加不足している事前

+0

from句にdept_empはありません。私。 WHERE句には3つのテーブルがあるように見えますが、2つのテーブルからのみ選択しています。 – jarlh

+0

'... from departments、 titles、dept_emp ...' from節に 'dept_emp'テーブルはありませんか? – 1000111

+0

@jarlhそれは強制ですか?私は結果に 'emp_no'を望んでいないからです。 –

答えて

1

で ありがとう:

select departments.dept_name as Department_name, 
     count(titles.title) as No_Of_Engineers 
from departments 
    INNER JOIN dept_emp 
     ON(dept_emp.dept_no = departments.dept_no) 
    INNER JOIN titles 
     ON(titles.emp_no = dept_emp.emp_no) 
WHERE titles.title like "% engineer %" 
group by departments.dept_no; 

は、私はまた、あなたの加入し、暗黙の結合構文の使用を避けるようにしてみてください(カンマ区切り)と適切な構文を使用してください修正しました結合の。

+0

答えをありがとう。暗黙的な結合を避ける必要がある理由を説明できますか? –

+0

これは読めなくなり、将来間違いにつながる可能性があります。おそらく、2つか3つのテーブルを結合するときには理解できますが、別のプログラマが6つ以上のテーブルを含んでいないコードを作成しようとすると、理解が非常に難しくなります。そして、LEFT JOINのことをプラス記号で話させてはいけません。それは悪い習慣であり、あなたは正しい構文に慣れるべきです。 – sagi

+0

おそらく間違った名前をつけたのではないでしょうか。 'departments'テーブルを見てください。' department_number'カラムの名前は何ですか? – sagi

関連する問題