2017-03-04 15 views
1

を選択する私は、MySQL Workbenchを使用しています、と私は、次の質問があります。以下の情報を提供する選択クエリを作成し、従業員のデータを使用してMySQLが参加し、複数のテーブルから

を: は、従業員のリストを表示し、どのような彼らは

  • 列である部門:従業員名、部署名

は、私はまったく同じリターンを提供する2つの文を持っているが、それは1000行です!私はこの "参加"を正しくしていますか?

SELECT 
    departments.dept_name, employees.last_name, employees.first_name 
FROM 
    departments, employees 
WHERE 
    departments.dept_name = employees.departments.dept_name; 

SELECT 
    dept_name, last_name, first_name 
FROM 
    departments 
INNER JOIN 
    employees 
ON 
    departments.dept_name = employees.departments.dept_name; 
+1

2番目の方法は正しいです。最初のものは古いもので、あなたの質問を中世の英語で書くのが好きです。 –

+0

どちらも正しいですが、第2のアプローチははるかに読みやすいです。 – jordanwillis

答えて

2

表従業員と部署は常に多くのものか​​ら多くのものです。したがって、それらの間には、id_emp列とid_dep列、またはより頻繁に4列、id_emp、id_dep、from、toを持つ入力テーブルが必要です。その後、あなたの質問は明確で、私たちは話すことができます。

例: テーブル:

employees      emp_dep      departments 
id_emp first_name   id id_emp id_dep   id_dep name 
1  John     1 1  1    1  Finacial 
2  Elsa     2 2  2    2  Human res 

注:id_empは、テーブルemp_depで& id_depは、すべての従業員が同じ部門に再び何度も作業することができますbeacause一緒に主キーにすることはできません。 3テーブルの上に

問合せ:

SELECT e.first_name, 
     d.name 
FROM (employees e 
     INNER JOIN emp_dep ed ON e.id_emp = ed.id_emp) 
INNER JOIN departments d ON ed.id_dep = d.id_dep; 

出力:このデータベースとテーブルを作成するための

first_name  name 
John   Financial 
Elsa   Human res 

SQL:

CREATE DATABASE employees_dep; 
CREATE TABLE employees (id_emp INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(10)); 
CREATE TABLE departments (id_dep INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10)); 
CREATE TABLE emp_dep (id int AUTO_INCREMENT PRIMARY KEY, id_emp INT, id_dep INT); 
1

正しいが、第二のが良い両方。

1

はどちらも同じです。ただし、大量のデータがある場合は2番目の方が高速ですが、小さなテーブルでは問題になりません。

関連する問題