我必须根据条件运行 SQL 查询。
有 2 个 AND 条件只有在满足它们的 if 条件时才需要执行。我们可以在这里使用 CASE 语句吗?如果是这样怎么办?或者还有其他方法吗??
SELECT * FROM MyTable
WHERE col1=@val1
if condition1 here
AND col2 = @val2
end if
if condition2 here
AND col3 = @val3
end if
任何人都可以帮我解决这个问题。我正在使用 sql server 2005。
最佳答案
在您的查询中包含它们,如下所示:
SELECT * FROM MyTable
WHERE col1=@val1
And (Not Condition1 Or col2 = @val2)
And (Not Condition2 Or col3 = @val3)
因此,如果 Not Not Condition1(意思是:Condition1 为真)则 col2(必须)= @val2。
(我将第二个条件逻辑更改为 AND col3 = @val3,因为您重复了 AND col2 = @val2)
编辑 以回应评论:
给我一个条件1的标准的例子。如果在 t-sql 中的查询中未使用语法,则显式。假设“以前的订单”必须小于 20 才能使第一个条件起作用,并且 . . .如果没有名字,第二个标准很重要。应该是:
SELECT * FROM MyTable
WHERE col1=@val1
And (MyTable.OrderCount > 19 Or col2 = @val2)
And ((Not MyTable.FirstName Is Null) Or col3 = @val3)
不要认为“如果这种情况是真的,这个标准很重要”。所有重要的因素都包含在 where 子句中。您必须了解 Or/And/Not 和操作顺序。这需要练习才能变好。如果您必须花几分钟仔细思考,请不要担心,我们其他人有时也是如此。
关于sql - 在 SQL SELECT 语句中给出条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2014698/