SQL 裡面常常會用到比較,像是Where 1=1, 複製空白Table會用到Where 1 = 2,
像是某欄位大於多少,某日期是否超過3天了?
那,當這個表格,
有四個欄位aa,bb,cc,dd,每個欄位都有值時,如何比對這四個欄位是沒有一樣的?
如何比對這四個欄位是沒有一樣的?
例如:
1,2,3,4 → OK
1,2,3,3 → NG
9,3,1,3 → NG
只有第1筆是OK的!
這個問題是我很久以前在寫猜字遊戲再產生不重複的四位數,思考的問題。
曾經為了這個,寫了一大堆的比較公式,
像是第1個數跟第2,3,4比較。
第2個數跟第3,4比較。
第3個數跟第4比較。
當有相同的則失敗。
寫著寫著就想到不同方法。
那,用SQL寫這種比較可能會暈倒
其實,<比較>也可用很簡單的方處理!
create table ithelp_compare
(aa number,
bb number,
cc number,
dd number)
/
insert into ithelp_compare values(1,2,3,4);
insert into ithelp_compare values(1,2,3,3);
insert into ithelp_compare values(9,3,1,3);
commit;
驗證寫入的資料共4筆
select * from ithelp_compare ;
AA BB CC DD
--------- --------- --------- ---------
1 2 3 4
1 2 3 3
9 3 1 3
簡單比吧
select aa, bb, cc, dd
from ithelp_compare ic
where (aa-bb) * (aa-cc) * (aa-dd) * (bb-cc) * (bb-dd) * (cc-dd) <> 0
/
AA BB CC DD
--------- --------- --------- ---------
1 2 3 4
原理就在,一旦有任兩個數是相同的,則相減=0,個別相減再相乘在一起,自然會等於0。
就這麼簡單!
但是,要特別注意,數字太大恐怕會有溢位的錯誤狀況。
[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1
[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1