【发布时间】:2020-12-11 06:00:24
【问题描述】:
T-SQL 中有OR 和AND 运算符。 AND 表示两个条件都为真,OR 表示只有第一个条件为真、只有第二个条件为真或两个条件都为真。
但我需要XOR 之类的东西,它类似于OR,但如果两者都为真,则不应用WHERE 条件。
例子:
select *
from [Table]
where Id in (@FromId) XOR TypeId = @TypeId
我的问题是:我应该如何编写这个查询,所以如果找到Id in (@FromId),它不会检查TypeId =@TypeId,如果找不到Id in (@FromId),它会检查TypeId =@TypeId。
我知道我可以写这个来解决问题:
select * from [Table] where Id in (@FromId)
if @@ROWCOUNT =0
select * from [Table] where TypeId =@TypeId
但我想把它写在一个查询中,为了简单、性能、更少的代码......
提前致谢。
【问题讨论】:
-
这些查询在逻辑上并不相同。
-
究竟是什么意思?你能解释更多吗?
-
添加表 DDL 示例数据和所需结果,您可能会看到。
-
如果你读过,我想你应该再读一遍。 SQL 查询的最小可重现示例:向我们展示
CREATE TABLE和INSERT语句,其中包含足够的样本数据以涵盖所有用例(满足一个条件的行、满足另一个条件的行、同时满足这两个条件的行,以及一行都不满足),然后告诉我们结果应该是每种情况。
标签: sql sql-server subquery where-clause window-functions