根据 IF 条件更改 WHERE 条件中使用的列

Posted

技术标签:

【中文标题】根据 IF 条件更改 WHERE 条件中使用的列【英文标题】:Change column being used in WHERE condition based on IF condition 【发布时间】:2018-01-11 19:22:19 【问题描述】:

我为标题道歉 - 我一直在努力想出更好的东西。

对此进行了一些研究,并确实找到了一些close examples,但这并不是我所需要的。

基本上,我有一个包含两列的表,我想在某些条件下进行评估。第 1 列是一个标识符,也可以为空。第 2 列是一个也可以更改的 SessionId。

我主要关闭 column1,但当 column1 为空时,我想关闭 column2。我上面链接的示例不会更改 WHERE 子句中正在评估的列,只会更改用于评估子句的值。

这里有一些伪代码来说明我想要做什么:

SELECT * FROM MyTable
WHERE
IF Column1 NOT NULL
   Column1 = @myvariable1
ELSE
   Column2 LIKE '%' + @myvariable2 + '%'

这样的事情可能吗?我可以根据其中一列的值在 WHERE 子句中切换要评估的列吗?

我希望这一切都有意义。

TIA

【问题讨论】:

【参考方案1】:

你可以使用CASE:

SELECT * 
FROM MyTable
WHERE (CASE WHEN Column1 IS NOT NULL AND Column1 = @myvariable1 THEN 1
            WHEN Column2 LIKE '%' + @myvariable2 + '%' THEN 1
            ELSE 0
      END) = 1;

【讨论】:

是的,这应该可以(如果您将IS 添加到NOT NULL【参考方案2】:

如果您将 @myvariable1 设置为 null,您应该在验证 where 子句时检查 Column1 上的 nullable。

SELECT * FROM MyTable
WHERE (Column1 IS NOT NULL AND Column1 = @myvariable1)
OR (Column1 IS NULL and Column2 LIKE '%' + @myvariable2 + '%')

【讨论】:

【参考方案3】:
WHERE  Column1 = @myvariable1
OR   ( Column1 IS NULL AND Column2 LIKE '%' + @myvariable2 + '%' )

【讨论】:

以上是关于根据 IF 条件更改 WHERE 条件中使用的列的主要内容,如果未能解决你的问题,请参考以下文章

使用条件将列更改为单独的数据框

mysql'WHERE'条件中的列号

如何有条件的更新sql 数据表中的列值?

根据@variable,根据IF条件执行不同的WHERE语句?

mysql语句where条件中的是啥意思

Cursor Select 语句 where 条件根据条件而变化