由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 请教一个在where clause里用case的sql语句
相关主题
请教关于CASE语句请教三个Key的property,
请问那种很复杂的sql语句,有什么套路吗?这个stored proc错在哪里?
吃了包子, 幹活了!请教一个Union后结果显示顺序的问题
Urgent SQL problem!PB SQL语句的简单问题
WHERE-CLAUSE 求助 (很复杂)help! 怎么insert一个多行的string
这个sql语句怎么写Another one
correlated subquery求救!!! 一个oracle的问题! 在procedure中所涉及的表名可以用变量从参数中传入吗
Oracle sql 怎么做case switch如何用join ... on语句查询三张表
相关话题的讨论汇总
话题: st话题: street话题: null话题: line2话题: line1
进入Database版参与讨论
1 (共1页)
s********e
发帖数: 893
1
有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如
1023 Richmond Dr -----保存到变量 ST_1里
或者
Apt 1234 ------保存到变量 ST_1里
1088 Bright Pkwy ------保存到变量 ST_2里
当在数据库里搜索这个地址时,可以用:
WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null)
or
(STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&))
这个是可行的,不过我总觉得也可以用Case When结构。
and STREET_LINE1 = &ST_1&
and
(case when &ST_1& is not null
then STREET_LINE2 = &ST_2&
else STREET_LINE2 is null
end)
AND STREET_LINE1 = &ST_1&
and STREET_LINE2 =
(case when &ST_2& is not null
then &ST_2&
else null
end)
可是这两种方式都不对。我知道第二种里的 = NULL在oracle里是不成立的。可是不知
道该怎样改正。改成 in 也不行。
哪位给看看正确的写法应该是怎样。多谢了!
B*****g
发帖数: 34098
2
IS NULL or IS NOT NULL

【在 s********e 的大作中提到】
: 有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如
: 1023 Richmond Dr -----保存到变量 ST_1里
: 或者
: Apt 1234 ------保存到变量 ST_1里
: 1088 Bright Pkwy ------保存到变量 ST_2里
: 当在数据库里搜索这个地址时,可以用:
: WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null)
: or
: (STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&))
: 这个是可行的,不过我总觉得也可以用Case When结构。

y****w
发帖数: 3747
3
考虑都定义成not null,如果是空用[default]空字符串。输入时 ''||xxx 处理一下。
这样就不用纠缠null了。

【在 s********e 的大作中提到】
: 有一个Web Form,用户需要输入地址。地址名可能会是一行或者两行。比如
: 1023 Richmond Dr -----保存到变量 ST_1里
: 或者
: Apt 1234 ------保存到变量 ST_1里
: 1088 Bright Pkwy ------保存到变量 ST_2里
: 当在数据库里搜索这个地址时,可以用:
: WHERE ((STREET_LINE1 = &ST_1& and STREET_LINE2 is null)
: or
: (STREET_LINE1 = &ST_1& and STREET_LINE2 = &ST_2&))
: 这个是可行的,不过我总觉得也可以用Case When结构。

s********e
发帖数: 893
4
谢谢楼上回答,我知道用我上面写的第一个query可以,不过我还是不清楚该怎样改写
case when,正确的语法格式应该是怎样?多谢了。
B*****g
发帖数: 34098
5
第一个可以改成:
WHERE STREET_LINE1 = &ST_1&
AND (STREET_LINE2 IS NULL OR STREET_LINE2 = &ST_2&)
非要用case(为什么那?):
WHERE STREET_LINE1 = &ST_1&
AND (1 = CASE WHEN STREET_LINE2 IS NULL OR STREET_LINE2 = &ST_2& THEN 1 ELSE
0 END)

【在 s********e 的大作中提到】
: 谢谢楼上回答,我知道用我上面写的第一个query可以,不过我还是不清楚该怎样改写
: case when,正确的语法格式应该是怎样?多谢了。

s********e
发帖数: 893
6
多谢Beijing MM!你的这个写法是对的!但是像你说的,的确没必要用Case When。只
是我开始想到了case when,觉得应该很容易实现,不过stuck在 =null 和is null这个
地方了。
结合yhangw 的提议,我把我第二个 case when稍改写了一下就完全可以了。
AND STREET_LINE1 = &ST_1&
and nvl(STREET_LINE2,'X') =
(case when &ST_2& is not null
then &ST_2&
else 'X'
end)
这个例子本身用case when意义不大,一个or就可以替代。
但是对于如果对同一个field比较的对象有多种可能性,用case when在where 里可能还
是比较有用的。
再次感谢!周末愉快!
1 (共1页)
进入Database版参与讨论
相关主题
如何用join ... on语句查询三张表WHERE-CLAUSE 求助 (很复杂)
about:SQL的执行效率这个sql语句怎么写
一个有关查询的语句correlated subquery
如何用SQL语句判断一个TABLE是否存在?Oracle sql 怎么做case switch
请教关于CASE语句请教三个Key的property,
请问那种很复杂的sql语句,有什么套路吗?这个stored proc错在哪里?
吃了包子, 幹活了!请教一个Union后结果显示顺序的问题
Urgent SQL problem!PB SQL语句的简单问题
相关话题的讨论汇总
话题: st话题: street话题: null话题: line2话题: line1