where 1=2 是什麼意思?與 where 1=1差別在那? |
尚未結案
|
vivi666666
初階會員 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
建議妳,問資料庫相關問題時,可以先說明妳所使用的資料庫系統是何者,以利回覆正確可用 1、where 1=2 沒有意義吧,它應是會傳回布林值 True/ Fase
0=2,1=2 條件不成立,當然是False 所以不會顯示資料(讓查詢沒有資料)
0=0,1=1 條件成立,當然是True 所以資料會顯示(讓查詢正常顯示)
2、as 是指定別名,當妳的查詢輸出時若要改變顯示的欄位名稱時用之
或是用了 sum / count / max ... 的函數,也給該欄位一個有意義的名稱 發表人 - ddy 於 2003/04/11 10:16:06
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
Ethan
版主 發表:101 回覆:170 積分:78 註冊:2006-07-05 發送簡訊給我 |
|
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 例 s := 'select sum(TAX) as COSTADJ, NSN from PO_BYINVD ' ' where 1=2 ' ' group by NSN'; 1: where 1=2 是什麼意思?與 where 1=1差別在那,依您的程式看來,應該是為了避免後面的條件成立時會加上and造成的錯誤,例如:您可能根據輸入條件資料的TEdit會資料有無動態的加入SQL的條件式,程式可能會這樣寫: var WhereString: String; if Edit1.Text <> '' then WhereString = 'Field_Name=' Edit1.Text; if Edit2.Text <> '' then WhereString = ' and Field_Name=' Edit2.Text; s := 'select sum(TAX) as COSTADJ, NSN from PO_BYINVD ' ' where ' WhereString;直接加上條件式,無1=2的方式 ' group by NSN';假設一個情況,若Edit1為空時,Edit2不為空時,此時Where後面就真接加上and而造成錯誤,若改成這樣就不會有錯 var WhereString: String; if Edit1.Text <> '' then WhereString = ' and Field_Name=' Edit1.Text; if Edit2.Text <> '' then WhereString = ' and Field_Name=' Edit2.Text; s := 'select sum(TAX) as COSTADJ, NSN from PO_BYINVD ' ' where 1=2' WhereString; ' group by NSN';如此寫就不怕有and的錯誤。 所以在您的程式中1=2只是多一個條件式即不顯示任何資料,1=1顯示全部資料。 當然1=2及1=1有特殊的用法,您可以比較下面兩個SQL語法的差異: Select * From TableName Where (FieldName = 'abc' or 1 = 2) 此時便會找出TableName中的FieldName等於abc,也就是代表條件成立 ================================================================== Select * From TableName Where (FieldName = 'abc' or 1 = 1) 此時便會找出TableName中所有資料,也就是代表條件不成立 引言: 2:什麼情況要用 as 另一個 table 或另一變數 (如 as COSTADJ)as的意思是給一個別名,也就是另一個名字,最常用的情況就是使用函數時會給一個別名,因為當您使用sum(TAX)是若沒有給別名,系統會內定給一個無意義名稱。所以我們希望給一個有意義的名稱使用as的方式。 ~小弟淺見,參考看看~ 發表人 - channel 於 2003/04/11 11:20:42
------
~小弟淺見,參考看看~ |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: where 1=2, 此1應該是table name. 而2應該是數值的table型態,如int,float,double... 如果是字串型態就必須要 where 1='2', 而 sum(TAX) as COSTADJ應該是要去統計 COSTADJ這個table裡 的 TAX欄位加總. 有錯誤請指正一下, 謝謝!據我所知,沒有一家資料庫可以用數字當 >< face="Verdana, Arial, Helvetica">引言: 依我所知~~ WHERE 1=1 指的是TABLE內的第一個欄位有沒有等於第一個欄位的樣子 不曉得對不對~~~嘻~~~ 不曉得你從哪裡知道的, 只能說想像力粉不錯. <>< face="Verdana, Arial, Helvetica">引言: 如前面DDY大大所述..我另外補充一下.. where 1=1的用法可以用在組SQL語法.. 我們通常是這樣寫..SELECT * FROM A,B,C WHERE A.A=B.A AND A.A=C.A 在提供查詢的時候常會遇到需要判斷到底是要用'WHERE'或者'AND' +(查詢,Join)條件. 這時候先加上這一句'where 1=1',接下來你所有的join 都直接用'AND' +(查詢,Join)條件,比較方便..僅供參考... 再補充, 如果 where 條件接下來是 'OR' 就不能這樣用. 可能會的到非預期的結果. 資料庫種類繁多, 記得先說用啥資料庫喔 發表人 - Mickey 於 2003/04/11 11:14:53 |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
插個花:
正如ddy先進所說where 1=2 只是為了取得空的資料,其他像where 1 <> 1 也是一樣的道理, 小弟常常拿來當Temp Table使用, 在程式中DataSet開一個空的資料, 只有欄位, 都沒有值, 可讓我們依需要下去填.另外關於動態SQL小弟不才的舉兩個例子
where 1 = 1的例子 SQL.Add('Select * from Table1 '); SQL.Add('where 1 = 1 '); if Edit1.Text <> '' then SQL.Add(' and Field1 = ''' Edit1.Text ''' '); if Edit2.Text <> '' then SQL.Add(' and Field2 = ''' Edit2.Text ''' '); where 1 <> 1 or 1 = 2的例子 SQL.Add('Select * from Table1 '); SQL.Add('where 1 <> 1 '); if Edit1.Text <> '' then SQL.Add(' or Field1 = ''' Edit1.Text ''' '); if Edit2.Text <> '' then SQL.Add(' or Field1 = ''' Edit2.Text ''' '); 要注意的是小弟在InterBase上面曾使用過where 1=2 或 where 1<>1 結果資料量大時回傳速度很慢, 還不如直接找一個有Index的欄位給他不可能的值來的快 例如 where MyField1 = -999999 //MyField1 指一個有Index的欄位 不曉得不同資料庫是否有差異, 不太建議使用 1 = 2 或 1 <> 1 以上若有錯誤請各位先進不吝賜教我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2003/04/13 02:21:47 發表人 - miles 於 2003/04/13 02:22:44
------
我不是高手, 高手是正在銀幕前微笑的人. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |