如果需要运算符的 where 子句中的条件

Posted

技术标签:

【中文标题】如果需要运算符的 where 子句中的条件【英文标题】:If condition in where clause where a operator is required 【发布时间】:2019-07-13 18:25:16 【问题描述】:

我有一个 select top 1 子查询 & where 子句需要有 if a = @a the b@b else if a @a then b = @b

我试图从子查询中获取前 1 个日期,它是 (a = @a And b @b) 或 (a @a And b = @b) 条件之后的第一个日期)。

我看过使用 CASE ,但如果满足条件,它需要一个值,而不是一个语句。我已经尝试过 IF 条件..Begin ...End & 无法让它工作

WHERE (T.Competition_Idx = TC.PtsCompID And TC.PtsMale = @histMale And TC.PtsFemale <> @histFemale And TE.StylID = @histStyle) 
                        OR (T.Competition_Idx = TC.PtsCompID And TC.PtsMale <> @histMale And TC.PtsFemale = @histFemale And TE.StylID = @histStyle)
                            ORDER BY T.Comp_Date DESC),@histStartDate)

我应该得到一个不满足 a = @a 和 b = @b 条件的日期,但我得到了最后一条记录的日期

【问题讨论】:

不知道如何在这个论坛上回复。可能有 a = 1 和 b = 0 的记录,然后是 a = 1 和 b = 2 的记录,之后 a =1 和 b 回到 = 0。我需要获取 a = 1 和 b = 的最后日期0. 这些是合作伙伴关系,我只需要最新的合作伙伴关系的记录,当 a =1 并且 b 回到 =0 时,如果这有意义的话,它会被认为是新的伙伴关系 【参考方案1】:

我不知道问题与代码有什么关系。

但可选参数的正常逻辑如下:

where (@a is null or a = @a) or
      (@b is null or b = @b)

我不确定这是否是您想要的。否则,您的逻辑的直接翻译是:

where (@a = a and @b <> b) or
      (@a <> a and @b = b)

【讨论】:

以上是关于如果需要运算符的 where 子句中的条件的主要内容,如果未能解决你的问题,请参考以下文章

SQL -------- WHERE子句与AND,OR和NOT运算符结合使用。

SQLite基础-7.子句

7)where子句

PostgreSQL DELETE 语句

PostgreSQL DELETE 语句

SQL 基础之where过滤和比较运算符