我对SQL(自学)和StackOverflow比较陌生。因此,如果有新话题,我深表歉意。
基本上,我试图使用case函数创建一些自定义列,然后使用配置数据库中的一些可选输入变量对这些结果进行过滤。
我知道mysql的执行顺序不允许这种情况发生,因为select之前执行的位置在这里,但是我很沮丧。
我浏览了其他一些线程,发现使用group by和have可能是一个选择,但是我无法使其正常工作,所以我不确定它是否适用于此,因为我没有使用任何聚合函数
SELECT (CASE
WHEN b.a = 1 THEN 'String1'
WHEN b.a = 2 THEN 'String2'
WHEN b.a = 3 THEN 'String3'
END) AS `CustomName1`,
(CASE
WHEN b.d = 4 THEN bc.a
WHEN b.d = 5 THEN bc.b
WHEN b.d = 6 THEN 'String4'
WHEN b.d = 7 THEN 'String5'
WHEN b.d = 8 THEN 'String6'
WHEN b.d = 9 THEN concat('string7 ', bc.e)
WHEN b.d = 10 THEN concat('string8 ', bc.f)
END) AS `CustomName2`
FROM b
JOIN bc ON bc.id = b.id
WHERE b.id != 0 [[and `CustomName1` like concat('%',{{InputVar1}},'%')]] [[and `CustomName2` like concat('%',{{InputVar2}},'%')]]
LIMIT 100 ;
基本上我的最终选择是让用户Input进入InputVar1和InputVar2,它仅提供来自我的两个case语句匹配其中一个或两个的结果。
即。用户在InputVar1中输入“ String3”,在InputVar2中输入“ String4”,则只会填充行中包含“ String3”和“ String4”的行。
在此先感谢您的帮助或建议。