簡體   English   中英

MYSQL:根據一個表的范圍加入兩個表

[英]MYSQL: JOIN two tables based on range on one table

我有兩張桌子

員工工資

   salary_id  emp_id  salary
    1         1       51000
    2         2       30000
    3         3       40000
    4         4       20000
    5         5       64000
    6         6       47000
    7         7       98000

員工禁忌結構

emp_id |    first_name | last_name |    gender  | email | mobile  | dept_id  | is_active

給定的工資表是

salary < 50000 as L
 70000 < salary > 50000 as M
salary > 70000 as H

According to salary slab list out the employee who fall in which salary slab 
SELECT *, 
   CASE
      WHEN salary < 50000 THEN 'L'
      WHEN salary BETWEEN 50000 AND 70000 THEN 'M'
      ELSE  'H'
   END CASE AS slab
FROM employee_salary

參加員工表以獲取姓名/個人信息留給讀者練習。

派生“薪水平板”與JOIN操作無關,它與從現有列派生“薪水平板”的值的表達式有關。

規范有點不完整,當薪水恰好等於70000或薪水為NULL時,它沒有指定“薪水表”。

舉個例子:

SELECT CASE
         WHEN s.salary <  50000 THEN 'L' 
         WHEN s.salary <  70000 THEN 'M'
         WHEN s.salary >= 70000 THEN 'H'
         ELSE NULL
       END AS salary_slab
     , e.emp_id
     , e.first_name
     , e.last_name
     , e.gender
     , e.email
     , e.mobile
     , e.dept_id
     , e.is_active
  FROM employee_salary s
  JOIN employee e
    ON e.emp_id = s.emp_id
 ORDER BY s.salary

在此示例中, CASE表達式“完成”了規范,並指定“薪水板”“ H”中有等於70000的薪水,而薪水的NULL值將返回NULL的“薪水板”值。

請注意,因為這是默認設置,所以可以省略ELSE NULL 包括它並不會改變行為,它只是強調了薪金可能為NULL的可能性。 (如果您的特定問題在列上沒有NOT NULL約束,那么這可能不是問題。但是將其擴展到更一般的問題,對於尋找相同問題答案的人來說,將其包括在內可能是有益的。 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM