English 中文(简体)
sql simple query
原标题:

Yesterday my friend asked me a question about this query:

select * from user where 1=1 

I said that the query is incorrect, but he said it s correct. I don t understand how this query can be correct. How does the where 1 = 1 part work?

最佳回答

This is common when a query is being built programatically, so for every condition you will add:

 AND (SOMECONDITION)

so the 1=1 starts the WHERE section, it is always true, and it doesn t hurt the performance.

问题回答

1=1 is usually used at the top of the where clause for formatting reasons and for ease of debugging. It is correct syntax and has no bearing on the output of the actual query.

It is especially useful when you want to comment out line by line of the where clause to debug. Consider the query

SELECT Columns 
FROM Table
WHERE 1=1
AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

versus

SELECT Columns 
FROM Table
WHERE Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

It is much easier to comment out any meaningful part of the WHERE clause with the first query

WHERE 1=1
-- AND Col1 = @Value1 
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

whereas in the second query you would have to do this

SELECT Columns 
FROM Table
WHERE --Col1 = @Value1
-- And 
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

EDIT:

Formatted the queries from above specially for StackOverflow because it only recognizes the /* COMMENT */ and not the -- COMMENT

It is much easier to comment out any meaningful part of the WHERE clause with the first query

WHERE 1=1
/* AND Col1 = @Value1  */
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

whereas in the second query you would have to do this

SELECT Columns 
FROM Table
WHERE /* Col1 = @Value1 */
/* And */
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5

1=1 is a dummy WHERE clause. It will just return every record from the user table as 1=1 is obviously true.

Put another way, the WHERE clause is applied to each record in users table and returns all records where the WHERE clause is true. 1=1 is obviously true all the time, so all records will match the condition and be returned.

1 is equal to 1 so the above thing 1 = 1 is true, and so the sql query will return all the rows.

Some SQL DB needs a where clause, so you can put a dummy where clause which will be true for all the rows in the tables.

1=1 equates to true and returns all rows in the query





相关问题
How to write this T-SQL WHERE condition?

I ve got two tables: TableA Col1 Col2 TableB Col3 Col4 I want to join them together: SELECT * from TableA join TableB ON (...) Now, in place of ... I need to write an expression ...

Customer and Order Sql Statement

TSQL query to select all records from Customer that has an Order and also select all records from customer that does not have an Order. The table Customer contains a primary key of CustomerID. The ...

Recommended way of querying multiple Versioned tables

Have a win 2003 box with MSSQL 2005 running on it. There is a database which is populated every morning with new/modified SalesOrder made the previous day. The database has several tables: SalesOrder, ...

update duplicate record

I have a table with the following fields Id Name IsPublic i need to write a sql query that updates IsPublic to false where name has a duplicate. Only one of the duplicates should have IsPublic = ...

Define variable to use with IN operator (T-SQL)

I have a Transact-SQL query that uses the IN operator. Something like this: select * from myTable where myColumn in (1,2,3,4) Is there a way to define a variable to hold the entire list "(1,2,3,4)"? ...

Selecting records during recursive stored procedure

I ve got a content management system that contains a hierarchical structure of categories, with sub-categories subject to different ordering options at each level. Currently, that s retrieved by a (...

热门标签