sql简单查询

Vip*_*pul 0 sql t-sql where

昨天我的朋友问了我一个关于这个查询的问题:

select * from user where 1=1 
Run Code Online (Sandbox Code Playgroud)

我说查询不正确,但他说这是正确的.我不明白这个查询是如何正确的.该where 1 = 1部件如何工作?

Ami*_*shk 7

这在以编程方式构建查询时很常见,因此对于要添加的每个条件:

 AND (SOMECONDITION)
Run Code Online (Sandbox Code Playgroud)

因此,1=1启动该WHERE部分,它始终是真的,并且它不会损害性能.


Raj*_*ore 5

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)