【发布时间】:2022-01-20 00:45:40
【问题描述】:
是否可以像下面这样在 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
在这种情况下,1 个工作(表工作)可以有许多活动(表活动)。我想显示基于 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)
【问题讨论】:
-
我认为你应该把它放在
SELECT中。顺便说一句,当您要在最左边的表以外的表列上执行WHERE时,执行LEFT JOIN没有意义——除非您要提取不匹配的NULL。否则,它只是将您的查询变成JOIN。 -
另外,
WHERE AND w.work_type=1是错误的 -
嗨@FanoFN。感谢您的关注。
标签: mysql sql where-clause