2017-05-04 76 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; 

我嘗試下面的代碼,但一直得到錯誤「#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; 

謝謝!

+0

你(認爲你)是什麼意思的「前100行」?表格沒有排序,直到最外面的排序依據爲止。 「試用下面的查詢」是什麼意思? 「似乎有效」是什麼意思?和「不舒服」?請閱讀[ask]和[mcve]並採取行動。請以表格和DDL文本編輯,不要鏈接到。 – philipxy

回答

2

您沒有加入Ë表和規劃表如之間子句:

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

感謝您的反饋,我認爲您的代碼有一個小錯誤「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 -does接受-的回答工作 – scaisEdge

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; 
0

「開」在內部條款加入是可選的。如果您沒有「開」條款,則意味着「交叉連接」。 如果你想要的是內連接,那麼你應該有一個「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:即使右表中沒有匹配,也會從左表中返回所有行。