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?
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
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 ...
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 ...
I have a stored procedure which takes an XML parameter and inserts the data into multiple tables. If I run the stored procedure into a database using a SSMS query window, everything works fine. ...
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, ...
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 = ...
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)"? ...
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 (...
I m trying to transform the SQL Query below into Linq to SQL select Categorias.IdCategoria, Categorias.Nome, SUM(lancamentos.valor) from lancamentos left outer join Categorias on Lancamentos....