这在以编程方式构建查询时很常见,因此对于要添加的每个条件:
AND (SOMECONDITION)
Run Code Online (Sandbox Code Playgroud)
因此,1=1启动该WHERE部分,它始终是真的,并且它不会损害性能.
1=1由于格式化原因和易于调试,通常在where子句的顶部使用.它是正确的语法,与实际查询的输出无关.
当你想逐行注释掉要调试的where子句时,它特别有用.考虑一下查询
SELECT Columns
FROM Table
WHERE 1=1
AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)
与
SELECT Columns
FROM Table
WHERE Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)
使用第一个查询注释掉WHERE子句的任何有意义部分要容易得多
WHERE 1=1
-- AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)
而在第二个查询中你必须这样做
SELECT Columns
FROM Table
WHERE --Col1 = @Value1
-- And
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)
编辑:
从上面专门为StackOverflow格式化查询,因为它只识别/* COMMENT */而不是-- COMMENT
使用第一个查询注释掉WHERE子句的任何有意义部分要容易得多
WHERE 1=1
/* AND Col1 = @Value1 */
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)
而在第二个查询中你必须这样做
SELECT Columns
FROM Table
WHERE /* Col1 = @Value1 */
/* And */
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
Run Code Online (Sandbox Code Playgroud)