2017-05-26 97 views
-1

我正在和员工mysql数据库示例一起玩,试图了解多个表的查询。事情是,我试图得到这个结果的表。MySQL员工数据库示例

emp_no, name, last name, from date, to date, dept_name 

,并与此查询:

SELECT 
    employees.emp_no, 
    employees.first_name, 
    employees.last_name, 
    dept_emp.from_date, 
    dept_emp.to_date, 
    departments.dept_name 
FROM (employees, dept_emp, departments) 
WHERE employees.emp_no = dept_emp.emp_no 
    AND departments.dept_no = dept_emp.dept_no 

我得到的结果,但如果雇主有更多的科指南表给了我为同一雇主更行。

我想知道这是否正常或者是否有任何其他方式来查询。我看到一些加入示例,但我不知道如何将它与三个表一起使用。

+1

怎么样'GROUP BY dept_emp.dept_no'? – Luiz

+0

阅读关于使用'JOIN'语句 –

+0

使用GROUP BY应该足够你 –

回答

2

这是你使用连接的完美例子。请参阅下面的示例以了解如何使用连接语法。下面的查询将产生与查询相同的结果,但是是一种更传统的语法。好处是你可以分开你的连接逻辑和你的过滤(WHERE子句)逻辑。如果需要过滤连接的结果,它将是一个简单的WHERE子句,而不是在WHERE子句中同时包含连接逻辑和过滤逻辑。

SELECT employees.emp_no, 
     employees.first_name, 
     employees.last_name, 
     dept_emp.from_date, 
     dept_emp.to_date, 
     departments.dept_name 
FROM employees e 
INNER JOIN dept_emp de 
    ON e.emp_no = de.emp_no 
INNER JOIN departments d 
    ON de.dept_no = d.dept_no 

我们首先从employees表中选择加入到dept_emp表。 on子句指定字段需要匹配才能加入这两个表。与dept_emp部门一样。

在这个例子中,我使用了INNER JOIN,它只返回匹配的行。有关联接的完整列表以及它们如何工作,您可以找到解释的大量资源。这里是一个很好的资源: https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

编辑:在回答你的问题的另一部分:

我得到的结果,但如果雇主有更多的科指南表给我的 多行同一位雇主。

我想知道这是否正常,或者如果有任何其他方式查询 那。我看到一些加入的例子,但我不知道如何使用它与三个表 。这对我来说都是新的。

是的这是正常的,如果每个员工有多个部门,每个部门将是一个具有相同emp_no的行。

+0

你能否澄清这个答案是如何解决这个问题的(具体来说,当员工拥有多个部门时,OP似乎要求获取多行) –

+0

更新了我的答案。 – datadever

+0

我仍不确定您的回应如何讨论INNER JOINS。 OP的查询具有在WHERE子句中定义的连接。据我所知,你的例子只有语法上的不同。 –

0

实现此目的的最佳方法是使用INNER_JOIN

+2

该联接位于OP示例中的WHERE子句中。它是一个INNER JOIN,但是它的语法不同。看到这里:https://stackoverflow.com/questions/2241991/in-mysql-queries-why-use-join-instead-of-where –