mysql存储过程动态Where子句

时间:2015-03-17 21:46:01

标签: mysql stored-procedures

我在存储过程中有以下查询:

SELECT * 
FROM tempProfile
WHERE 1 = 1
and case    when l_primarymailingaddress = 'address1' then find_in_set(add1_stateid,p_stateid) or p_stateid is NULL
            when l_primarymailingaddress = 'address2' then find_in_set(add2_stateid,p_stateid) or p_stateid is NULL end;

我在p_stateid上传递了一系列ID。

第一个案例找到匹配,但第二个案例没有找到匹配。

因此,例如,如果我传入7,我确实收到add1_stateid中包含7的所有结果,则查询不返回add2_stateid中包含7的结果。

与每个示例和描述相比,我发现这应该有用。

有人能够看到我在这里做错了吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

好的 - 更新了我的答案,解决了你在哪里明确解释了你使用in_set和P_stateid的原因。是否将Case语句分成两部分并使用OR来比较它们的工作原理?

SELECT * 
FROM tempProfile
WHERE 
case when l_primarymailingaddress = 'address1' AND find_in_set(add1_stateid,p_stateid) THEN 1 ELSE 0 END
OR
case when l_primarymailingaddress = 'address2' AND find_in_set(add2_stateid,p_stateid) THEN 1 ELSE 0 END
OR
p_stateid is NULL
;

第二次更新 - 在p_stateid为NULL时添加另一个OR来返回记录