我在存储过程中有以下查询:
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的结果。
与每个示例和描述相比,我发现这应该有用。
有人能够看到我在这里做错了吗?
非常感谢
答案 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来返回记录