MYSQL - 一个查询中的多个条件

时间:2017-04-29 01:54:47

标签: mysql

我有一张表格,其中存储了符合特定条件的员工所需的特定培训标准。他们的员工档案有各种各样的信息,但培训“档案”主要由工作提示,部门,省/州,国家和项目所驱动。

我正在尝试确定如何执行以下操作:

  • 查找非空的第一列(绝不会是所有列都为空的情况)
  • 根据用户个人资料中传递给它的值进行检查
  • 如果满足此条件,请移至下一个剩余列,并查看其他任何值是否匹配。
  • 如果有一个匹配且其余为空,则返回该行。如果多个列不为null,则每个传递的值必须匹配。

样本表:

+---------------------------------------------------------------------------------------------+
|                                      trainingProfile_tb                                     |
+---------------------------------------------------------------------------------------------+
| No | course_name | project_id | provinceState_id | country_id | department_id | jobTitle_id |
+----+-------------+------------+------------------+------------+---------------+-------------+
| 1  | Shooting    |       null |                1 |          2 |          null | null        |
| 2  | Running     |          1 |             null |       null |          null | null        |
| 3  | Shooting    |          2 |                3 |       null |             1 | null        |
+----+-------------+------------+------------------+------------+---------------+-------------+

假设员工的项目为1,省/州为1,国家为2,部门为1,职称为1。

我想返回拍摄和跑步的课程,因为表格中的值与非空值相匹配。

我希望这是有道理的,但如果没有,请告诉我需要澄清的内容,我会尽力而为。提前谢谢!

更新

所以这似乎达到了预期的效果。是否有更有效和/或更优雅的写作方式?

SELECT course_name FROM `requiredtraining_tb` WHERE 
CASE WHEN company_id is null THEN TRUE WHEN company_id is not null and company_id=1 THEN TRUE END
AND
CASE WHEN provinceState_id is null THEN TRUE WHEN provinceState_id is not null and provinceState_id=3 THEN TRUE END
AND
CASE WHEN jobTitle_id is null THEN TRUE WHEN jobTitle_id is not null and jobTitle_id=3 THEN TRUE END 

2 个答案:

答案 0 :(得分:0)

我想你可以从这开始...

Select No entity
    , 'course_name'  attribute
    , course_name value
From training_profile_tb
Union 
Select no
     , 'project_id'
     , project_id...

答案 1 :(得分:0)

选择部分中通常使用关键字的情况。 如果您想获取一些具有多个条件和冲突的数据,您可以在更多已分发的选择之间创建一些临时表,如 union join 。 之后,您有一张表,所有人都需要数据,并制定您的共享条件。 如果你想要查询!?请详细说明。 关心a.ayati