2009-02-05 36 views
7

我正在經歷一些我正在維護的查詢,一位程序員已經將「where 1 = 1」的查詢放入我看來似乎總是評估爲真的查詢中。爲什麼一個sql查詢會有「where 1 = 1」

這是否有益處?

重複:Why would someone use WHERE 1=1 AND in a SQL clause?

這個問題不回答這個問題。

WHERE子句:

select * from table where 1=1 and sStatus not in ('status1','status2','status3') 

無需編程或if語句來推動的,並在那裏。一個直接的查詢。

如果你可以關閉這個,我想知道是否有目的,以便我可以重寫並刪除1 = 1,如果它是不必要的。

+0

沒有目的,我可以看到,並通過接受的答案判斷,看起來1 = 1的鏈接將被優化。可能有人做了一點cut'n'paste編程。 – 2009-02-05 18:38:42

回答

16

它是動態查詢嗎?有時候,在基於可選參數構建動態查詢時這很有用。

1

我見過兩個原因,當你總是想有一個真正的結果,或有將是任意數量的「和條件=價值」追加到聲明

6

我用這個動態where子句時,我正在做一些懶惰的編程,並不想總是檢查子句是否爲空,以確定我現在是否需要在我的動態子句之間使用「AND」。

4

這真的只對動態查詢有意義。如果您要在循環中添加參數,而不必檢查是否存在WHERE,那麼您每次只能追加AND Column = Value。

10

如果您正在動態創建where子句,您可能會有點懶,並且假設您添加的每個子句都可以用「AND」作爲前綴,例如,

$str="select foo from bar where 1=1"; 

if ($filter1) 
{ 
    $str.=" and col1='frobozz'"; 
} 
0

這非常有趣... WHERE子句除1 = 1外什麼都沒有包含?我經常在SQL注入嘗試中看到這種情況,其中WHERE子句設置爲 xyz="something" OR 1=1; 作爲一種總是返回結果列表的方式。

你能告訴我們更多關於這個查詢是怎麼回事,所以我們可以更好地回答這個問題嗎?

  • 尼古拉斯
8

如果自動希望限制添加到您的查詢,它使您的生活更輕鬆:

string sql = "SELECT * FROM table WHERE 1=1"; 

if (someflag) { 
    sql += " AND valid = 1"; 
} 

if (someotherflag) { 
    sql += " AND special = 1"; 
} 

execute(sql); 

沒有WHERE 1 = 1你會在每種情況下必須檢查它的您添加的第一個限制(然後使用WHERE ...),或者您之前已經添加了其他限制(然後添加AND ...)。

相關問題