(非常着急)请问IF语句能不能放在where里面

thefirstwind 2008-04-24 04:42:32
请问IF语句能不能放在where里面

IF((APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1'),APPROVAL_CLASS not in ('07','11'),APPROVAL_CLASS in ('07','11')))
感觉是不能,但是类似的功能如何实现啊?

...全文
275 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingkongzhang 2010-06-17
  • 打赏
  • 举报
回复
顶一下了
懒得去死 2008-04-25
  • 打赏
  • 举报
回复
其他数据库中不知道,在MYSQL不能这样干。

你可以把IF函数的结构赋给一个临时变量。然后WHERE.
thefirstwind 2008-04-25
  • 打赏
  • 举报
回复
liuyann : 145
wwwwb : 45
yueliangdao0608 : 10

多谢了
liuyann 2008-04-25
  • 打赏
  • 举报
回复


==== ====
liuyann 2008-04-25
  • 打赏
  • 举报
回复


==== ====
thefirstwind 2008-04-25
  • 打赏
  • 举报
回复
分数又加了100
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
呵呵,自己解决更好
thefirstwind 2008-04-25
  • 打赏
  • 举报
回复
问题已经解决了。
从新理解业务的基础上,发现原有的SQL语句有很大的问题。
虽然提的这个问题已经用不上了,但是学到了很多东西。
非常感谢大家。
所以决定不分对错,按照大致的字节数比例发分。
yifuzhiming 2008-04-25
  • 打赏
  • 举报
回复
高手都说可以,那就可以
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
那应该可以,自己试试吧
liuyann 2008-04-25
  • 打赏
  • 举报
回复

[Quote]
mysql> select count(*)
-> from cdr
-> where IF(calldate>curdate(),1=1,1=2);
+----------+
| count(*) |
+----------+
| 360 |
+----------+
1 row in set (0.83 sec)

mysql>[/Quote]
==== ====
liuyann 2008-04-25
  • 打赏
  • 举报
回复

[Quote]mysql> select version();
+-----------+
| version() |
+-----------+
| 4.1.20 |
+-----------+
1 row in set (0.00 sec)[/Quote]
==== ====
wwwwb 2008-04-25
  • 打赏
  • 举报
回复
感觉MY SQL的SQL 语句功能太弱,TOP、在WHERE中不支持IIF等等
liuyann 2008-04-24
  • 打赏
  • 举报
回复

实现 的方法三:
where 
(APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1') AND (APPROVAL_CLASS<>'07' AND APPROVAL_CLASS<>'11')
OR
(APPROVAL_CLASS <> '11' OR APPROVAL_FLG <> '1') AND (APPROVAL_CLASS='07' OR APPROVAL_CLASS='11')

==== ====
liuyann 2008-04-24
  • 打赏
  • 举报
回复

实现 的方法二:
IF(
(APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1'),
(APPROVAL_CLASS<>'07' AND APPROVAL_CLASS<>'11'),
(APPROVAL_CLASS='07' OR APPROVAL_CLASS='11')
)

==== ====
liuyann 2008-04-24
  • 打赏
  • 举报
回复

实现 的方法一:

IF(
(APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1'),
INSTR('07,11,', CONCAT(APPROVAL_CLASS,','))=0,
INSTR('07,11,', CONCAT(APPROVAL_CLASS,','))>0
)

==== ====
liuyann 2008-04-24
  • 打赏
  • 举报
回复

IF(
(APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1'),
APPROVAL_CLASS not in ('07','11'),
APPROVAL_CLASS in ('07','11')
))

你的语句中 IN 不是函数,所以会有问题。
==== ====
liuyann 2008-04-24
  • 打赏
  • 举报
回复

IF((APPROVAL_CLASS = '11' AND APPROVAL_FLG = '1'),APPROVAL_CLASS not in ('07','11'),APPROVAL_CLASS in ('07','11')))

你的SQL语句连括号都匹配不齐。
==== ====
liuyann 2008-04-24
  • 打赏
  • 举报
回复

请问IF语句能不能放在where里面

当然可以
==== ====
WWWWA 2008-04-24
  • 打赏
  • 举报
回复
if((11,1),if((11,0),iif((7,0/1),if((7,0/1),if((null)))))
大概是这样,自己试试吧,用CASE WHEN也可以
加载更多回复(3)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧