昨天我的朋友問我一個問題關於這個查詢:SQL簡單的查詢
select * from user where 1=1
我說,查詢是不正確的,但他說,這是正確的。我不明白這個查詢是如何正確的。 where 1 = 1
部分如何工作?
昨天我的朋友問我一個問題關於這個查詢:SQL簡單的查詢
select * from user where 1=1
我說,查詢是不正確的,但他說,這是正確的。我不明白這個查詢是如何正確的。 where 1 = 1
部分如何工作?
這是常見的,當查詢被編程的方式構建,因此對於每個條件,您將添加返回的所有行:
AND (SOMECONDITION)
所以1=1
啓動WHERE
部分,它總是如此,並且不會損害性能。
1 = 1是一個虛擬的WHERE子句。它只會返回用戶表中的每條記錄,因爲1 = 1顯然是真的。
換言之,WHERE子句應用於users表中的每個記錄,並返回WHERE子句爲真的所有記錄。 1 = 1顯然是真的,所以所有的記錄都會匹配條件並被返回。
1等於1 所以上面的東西1 = 1是真的,所以sql查詢將返回所有的行。
某些SQL DB需要一個where子句,因此您可以將一個dummy where子句放在表中的所有行中。
1 = 1等同於真實和查詢
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
與
SELECT Columns
FROM Table
WHERE Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
這是很容易在你所要說的第二查詢與第一查詢
WHERE 1=1
-- AND Col1 = @Value1
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
註釋掉WHERE子句中的任何有意義的部分,而必須這樣做
SELECT Columns
FROM Table
WHERE --Col1 = @Value1
-- And
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
編輯:
格式化從上面專門爲StackOverflow上的查詢,因爲它只能識別/* COMMENT */
,而不是-- COMMENT
這是很容易註釋掉的WHERE子句中的任何有意義的部分與第一查詢
WHERE 1=1
/* AND Col1 = @Value1 */
And Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
而在第二個查詢你就必須做到這一點
SELECT Columns
FROM Table
WHERE /* Col1 = @Value1 */
/* And */
Col2 IN (@Value2, @Value3)
And Cole Between @Value4 and @Value5
該查詢等效於:'SELECT * FROM user' – intgr 2009-11-17 10:07:14