MYSQL:根据一个表上的范围加入两个表

时间:2014-07-30 19:52:51

标签: mysql sql

我有两张桌子

employee_salary

   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

员工 tabe结构

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 

2 个答案:

答案 0 :(得分:3)

SELECT *, 
   CASE
      WHEN salary < 50000 THEN 'L'
      WHEN salary BETWEEN 50000 AND 70000 THEN 'M'
      ELSE  'H'
   END CASE AS slab
FROM employee_salary

加入员工表以获取姓名/个人信息留给读者练习。

答案 1 :(得分:1)

派生“薪水板”不是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表达式“完成”规范,指定等于70000的工资在“工资单”“H”中,而工资的NULL值将返回“工资单”值NULL。

请注意ELSE NULL可以省略,因为这是默认值。包括它不会改变行为,它只是突出了薪水可能为NULL的可能性。 (对于您的特定问题,这可能不是问题,如果列上存在NOT NULL约束。但是将此扩展到更一般的问题,对于搜索相同问题的答案的人来说,包含该问题可能是有益的。 )