【问题标题】:Case statement with end = 1 in T/SQL queryT/SQL 查询中 end = 1 的 case 语句
【发布时间】:2014-11-20 12:41:12
【问题描述】:

我希望有人可以向我解释以下查询,因为我不熟悉语法:

@[user1]   int,
@[user2]   varchar(10)

delete 
from [table name]
where [id] in (select [id]
            from [a diff table name]
            where [user1] = @[user1])
and (case
     when [user2] = 'some string' then 1
     when [table field] = @user2 then 1
     else 0
     end) = 1
and [other field] = 0
and [other field] = 0
and [other field]= 0

首先,我显然更改了所有变量/表的名称。如果有任何不清楚的地方,请道歉。我知道第一部分是一个删除语句,它使用了一个 in 语句。没关系。我也得到了最后一部分,多个 AND 语句向 WHERE 子句添加条件。

这是我正在努力解决的案例陈述。我有两个问题。

  1. else 0 有什么用?是否附加到它上面的 when 子句中,以便 if [table field] doesn't = 传入的 user2 变量设置为 0?
  2. 什么是结尾 = 1?我试过用谷歌搜索,但之前没有找到这种表单的任何示例。

【问题讨论】:

  • 我添加了括号,这将有助于更好地解释案例陈述:)

标签: sql-server tsql case


【解决方案1】:

ELSE 0 表示如果 WHEN 语句都不匹配,CASE 语句将返回 0。

End = 1 如果你把它想象成

就更容易理解了
WHERE (CASE .... END) = 1

【讨论】:

  • 啊,我明白了。所以理想情况下,如果 case 语句匹配,它将是“where 1 = 1”,否则它将是“where 0 = 1”,这将失败。知道了。谢谢
  • 不确定这里为什么使用 CASE 表达式,因为它可以写成AND ([user2] = 'some string' OR [table field] = @user2)。恕我直言。这种结构使意图更加清晰。
【解决方案2】:

您的 CASE stmt 将返回 1 或 0,具体取决于该列中的数据。

如果它返回 1 则 1=1 并且下面指定的其他条件也会发生。
如果返回 0 则 0=1 ,其余条件将不予考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多