在 WHERE 条件下使用 Case 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)
它 returns 没有错误,但结果总是显示 act.id_activity_type = 2 而不是 2,3 或 2,3,4,9
在这种情况下,1 个工作(table 个工作)可以有多个活动(table activity)。我想显示基于 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
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)
)
我认为 case 用于那种情况。我认为在这种情况下可以使用。以及 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
匹配。
是否可以像下面这样在 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)
它 returns 没有错误,但结果总是显示 act.id_activity_type = 2 而不是 2,3 或 2,3,4,9
在这种情况下,1 个工作(table 个工作)可以有多个活动(table activity)。我想显示基于 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
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)
)
我认为 case 用于那种情况。我认为在这种情况下可以使用。以及 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
匹配。