繁体   English   中英

在 WHERE 条件下使用案例 MYSQL

[英]Using Case in WHERE condition MYSQL

是否可以在 WHERE 条件下使用 CASE 语句,如下所示?

SELECT act.id_activity FROM activity act
LEFT JOIN work w ON w.id_work = act.id_work
WHERE 
w.work_type=1
AND w.work_tender in (1,2)
AND act.id_activity_type IN 
(CASE WHEN w.work_tender=1 THEN '2,3' WHEN w.work_tender=2 THEN '2,3,4,9' END)

它不返回错误,但结果始终显示 act.id_activity_type = 2 而不是 2,3 或 2,3,4,9

在这种情况下,一项工作(表工作)可以有许多活动(表活动)。 我想显示基于 work.work_tender 类型的活动。 如果 work.work_tender=1 则需要选择 activity.id_activity_type IN (2,3)。 如果work.work_tender=2 那么需要选择activity.id_activity_type IN (2,3,4,9)

您可以尝试通过OR & AND编写正确的逻辑。

SELECT act.id_activity FROM activity act
LEFT JOIN work w ON w.id_work = act.id_work
WHERE 
AND w.work_type=1
AND (
    (act.id_activity_type IN ('2','3') AND w.work_tender=1) OR 
    (act.id_activity_type IN ('2','3','4','9') AND w.work_tender=2)
)

我认为案例用于该案例。 我认为在这种情况下可以使用。 也适用于 orderby 短语。

也许你可以试试这个:

SELECT * 
FROM activity a 
JOIN work w
ON w.work_tender=
   CASE WHEN a.id_activity_type IN (2,3) THEN 1
        WHEN a.id_activity_type IN (2,3,4,9) THEN 2 END;

如果a.id_activity_type符合条件,我在这里使用CASE表达式来分配匹配w.work_tender的值。 因此,如果a.id_activity_type IN (2,3) THEN 1将与w.work_tender=1匹配,同样与a.id_activity_type IN (2,3,4,9) THEN 2将与w.work_tender=2匹配。

演示小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM