我试图从员工数据库中获取包含名字,姓氏,部门名称,职位,薪水的前100行,但不确定我是否正确执行此操作。我尝试了下面的查询,它似乎工作,但特别感觉不对,因为最后2个连接没有ON语句。它是否正确,是否有更有效的方法可以执行此查询。
这是数据库表图表的链接,可让您了解数据库。 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;
我尝试了下面的代码但是在第二个到最后一个ON语句中开始出现错误“#1054 - 'on clause'中的未知列'e.emp_no'”。
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;
谢谢!
答案 0 :(得分:2)
e表和dp表之间没有连接子句,例如:
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;
答案 1 :(得分:1)
试试这样:
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;
答案 2 :(得分:0)
内部联接中的“On”子句是可选的。如果您没有“On”子句,则表示“交叉连接”。 如果你想要的是内连接,那么你应该有一个“On”子句并指定哪些列应该等同。
答案 3 :(得分: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:返回左表中的所有行,即使右表中没有匹配项。