这个是一个奇怪的,我似乎无法绕过我的脑袋。
基本上我需要根据具有覆盖的值进行搜索。所以有2列具有基本相同的内容。一个是自动更新的,一个是手动的。如果自动一个不可用,它将使用手册,如果手册不可用,它将使用自动手册。最后,如果两者都可用,它将使用自动,除非启用“覆盖”标志(可能是第三列)。
我需要做的是使用列上的优先级集,基于该参数进行搜索,就像它是一个字段一样。所以这是一个示例WHERE语句,但我不知道可能使用的语法是什么。
WHERE (isset(width)?(width_override?o_width:width):o_width) = {query}
答案 0 :(得分:2)
使用IF
功能。
WHERE IF(width IS NOT NULL, IF(width_override, o_width, width),
o_width) = {query}
答案 1 :(得分:2)
我认为你正在寻找COALESCE():
SELECT COALESCE(overridden_width_col, automatic_width_col) width
FROM yourtable
WHERE COALESCE(overridden_width_col, automatic_width_col) = %param
COALESCE()将返回第一个非NULL参数。 overridden_width_col设置为NULL,它将使用automatic_width_col。