mysql - 我可以根据 select 的值在 where_in MySQL 查询上使用 IF 或 CASE

标签 mysql

是的,基本上我需要的是一个不同的 WHERE_IN 子句,该子句基于同一个表中的列的值,因此是相同的查询。

所以看看下面的查询。 r.assigned_type 是 1 或 2,我需要有一个/或 r.assigned_id IN 子句。

我可以这样做吗?

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name`
FROM `risk_assessments` `r`
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
WHERE `r`.`org_id` = '3'
AND `r`.`risk_type_id` = '1'
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= '7'
AND `r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15')
OR `r`.`assigned_id` IN('9', '14')  

或者我需要一个选择子查询吗?

或者更糟的是,我需要重新格式化表、数据库结构和代码吗?

我想做的是这样的(出于示例目的缩短查询):

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`
FROM `risk_assessments` `r`
WHERE `r`.`org_id` = '3'
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= '7'
CASE WHERE r.assigned_type = 2
 `r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15')
ELSE 
 `r`.`assigned_id` IN('9', '14')  

最佳答案

看起来您可以使用简单的 AND/OR 和一些括号,例如:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`
FROM `risk_assessments` `r`
WHERE `r`.`org_id` = '3'
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= '7'
AND ((`r`.`assigned_type` = 2
     AND `r`.`assigned_id` IN('5', '10', '11', '12', '13', '14', '15'))
     OR `r`.`assigned_id` IN('9', '14'))

关于mysql - 我可以根据 select 的值在 where_in MySQL 查询上使用 IF 或 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848870/

相关文章:

php - 从表中提取数据,然后按降序回显

mysql - 从 3-4 个表中选择的 SQL 查询

MySQL - 跟踪用户事件以仅在第一次时显示内容

mysql - 根据另一个表中的列更新表中的列。

php - 让 jQuery 自动完成与 PHP 源一起工作

mysql - 选择不包含其他表中特定数据的数据

php - Doctrine 2 映射引用唯一键

mysql - 授予用户权限以仅查看 MySQL View 而不是其他 View

mysql - 创建一个与 mysql 中的 GROUP BY 一起使用的用户定义函数

PHP-MYSQLI : My login scripts logs direct users into the same page