2017-05-04 11 views
-1

私はそれを正しく行っているかどうかわからないが、従業員データベースから名字、部署名、タイトル、給与からなる最初の100行を取得しようとしています。私は以下のクエリを試してみましたが、動作するようですが、最後の2つの結合のON文がないので、特に気にしません。それは正しいのですが、私はこのクエリを実行するより効率的な方法です。これは適切なMySqlクエリです

これは、データベースの考え方を示すデータベーステーブルグラフへのリンクです。 https://dev.mysql.com/doc/employee/en/images/employees-schema.png

動作しているようですマイクエリ:

SELECT e.first_name, e.last_name, dpn.dept_name, t.title, s.salary 
FROM employees e, dept_emp dp 
INNER JOIN departments dpn 
ON dp.dept_no = dpn.dept_no 
INNER JOIN salaries s 
INNER JOIN titles t 
LIMIT 100; 

私は以下のコードを試してみましたが、エラー取得保管 - 2番目の開始「#1054 『節に』不明な列を 『e.emp_no』」最後のONステートメント。

SELECT e.first_name, e.last_name, dpn.dept_name, t.title, s.salary 
FROM employees e, dept_emp dp 
INNER JOIN departments dpn 
ON dp.dept_no = dpn.dept_no 
INNER JOIN salaries s 
ON e.emp_no = salaries.emp_no 
INNER JOIN titles t 
ON e.emp_no = t.emp_no 
LIMIT 100; 

ありがとう!

SELECT e.first_name, e.last_name, dp.dept_name, t.title, s.salary 
    FROM employees e 
    INNER JOIN dept_emp dp on e.emp_no = dp.emp_no 
    INNER JOIN departments dpn ON dp.dept_no = dpn.dept_no 
    INNER JOIN salaries s ON e.emp_no = s.emp_no 
    INNER JOIN titles t ON e.emp_no = t.emp_no 
    LIMIT 100; 
+0

"最初の100行"とは何ですか?テーブルには、一番外側のSORT BYまで順序はありません。 「下のクエリを試した」とはどういう意味ですか? 「うまくいく」とはどういう意味ですか?そして、 "気分が悪い"と感じていますか? [ask]と[mcve]を読んで行動してください。テーブルとDDLをテキストとして編集してください。リンクしないでください。 – philipxy

答えて

2

SELECT e.first_name, e.last_name, departments.dept_name, titles.title, salaries.salary 
FROM employees e 
INNER JOIN dept_emp 
ON e.emp_no = dept_emp.emp_no 
INNER JOIN departments 
ON dept_emp.dept_no = departments.dept_no 
INNER JOIN titles 
ON e.emp_no = titles.emp_no 
INNER JOIN salaries 
ON e.emp_no = salaries.emp_no 
LIMIT 100; 
+0

ご意見ありがとうございます。あなたのコードに小さなエラーがあると思います。 "INNER JOIN dept_emp dp on e.emp_no = dp.dept_no" ONステートメントは "ON e.emp_no = dp.emp_no"にする必要があります。 emp_noとコードを比較しているので、emp_noとdept_noを比較しています。 – bluemoon718

+0

@ bluemoon718提案ありがとうございました..回答が更新されました。私の回答(または他の人)が正しい場合は、それを受け入れたとマークしてください...どうぞこちらをご覧ください http://meta.stackexchange.com/questions/5234/how - 返事を受け入れる – scaisEdge

1

はこのようにそれを試してみてください:あなたはなしEテーブルとDPテーブルなどの間の句に参加している

0

"オン" 句内部ではオプションで参加します。あなたが "On"句を持っていない場合、それは "クロスジョイン"を意味します。 あなたが望むものが内部結合であれば、 "On"節があり、どちらの列が等しいかを指定する必要があります。

0
SELECT e.first_name, 
     e.last_name, 
     departments.dept_name, 
     titles.title, 
     salaries.salary 
FROM employees e 
     LEFT JOIN dept_emp 
       ON e.emp_no = dept_emp.emp_no 
     LEFT JOIN departments 
       ON dept_emp.dept_no = departments.dept_no 
     LEFT JOIN titles 
      ON e.emp_no = titles.emp_no 
     LEFT JOIN salaries 
       ON e.emp_no = salaries.emp_no 
LIMIT 100; 

INNERので、あまりにもこれを試してみてくださいは、JOIN:すべてのテーブル内の一致がある場合に行を返します。

LEFT JOIN:右テーブルに一致するものがなくても、左テーブルからすべての行を返します。

関連する問題