新手电脑网's Archiver

syziy 发表于 2008-9-30 14:09

where 1=1的作用

where 1=1
k3iyvo }9_9Y;r 最近看到很多sql里用到where 1=1,原来觉得这没用嘛,但是又想到如果没用为什么要写呢?于是在网上
{YJ#^ @$IZ:P%{
['|Bp6Zb E~h Bh 查了查,在这里就浅谈一下:)o!hz.eZ4k%@
1=1 永真, 1<>1 永假。
F/N.cz)X x
vG/H3i N1t 1<>1 的用处:
D A#b%_c!h bO"x;w 用于只取结构不取数据的场合
(A!zf4F w` 例如:o't-d"h+U+o
create table table_temp tablespace tbs_temp as*B b5?I#nU9y
select * from table_ori where 1<>1
9ju@ B1j2dh\ 建成一个与table_ori 结构相同的表table_temp,但是不要table_ori 里的数据。(除了表结构,其它结DlAiz,R {6c T6k
8g2}5U_t B_
构也同理)"m3r8]O%E
;A:wBY8rT)V#L
1=1的用处
,F:`]8Lu+HR g W(tS 用于动态SQLntf7w zAGq
例如 lv_string := 'select tbl_name,tbl_desc from tbl_test where 1=1 '||l_condition;~ L(s`4C s'O6o/^
当用户选择了查询的名称'abc'时l_condition :='and tbl_name = ''abc'''';但是当用户没有
5Z[!d _H5RS%mZ `
KXS3I)_#b;Pn;h 选择名称查询时l_condition就为空 这样 lv_string = 'select tbl_name,tbl_desc from tbl_test -f:|8U6N5c)}

-fO'P2?1A+d#N6@!N LX i where 1=1 ' ,运行也不会出错,相当于没有限制名称条件。但是如果没有1=1的条件,则lv_string =
+lcO1Sc9urt
j1HE9QGdZ%FD 'select tbl_name,tbl_desc from tbl_test where ';这样就会报错。H}7b9N7B{#Eh

L4rB0]0U1Qu 除了1=1 或1<>1之外的其它永真永假的条件同理。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.