1

这是一个奇怪的,我似乎无法理解。

基本上我需要根据具有覆盖的值进行搜索。所以有 2 列内容基本相同。一种是自动更新,一种是手动更新。如果没有自动的,它将使用手动的,如果没有手动的,它将使用自动的。最后,如果两者都可用,它将使用自动除非并启用“覆盖”标志(可能是第三列)。

我需要做的是基于该参数进行搜索,就好像它是一个字段一样,使用列上的一组优先级。所以这里是一个示例 WHERE 语句,但我不知道使用什么可能是正确的语法。

WHERE (isset(width)?(width_override?o_width:width):o_width) = {query}
4

2 回答 2

2

使用该IF功能。

WHERE IF(width IS NOT NULL, IF(width_override, o_width, width),
                            o_width) = {query}
于 2013-07-25T15:27:11.643 回答
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。

于 2013-07-25T15:27:53.770 回答