请教两个where条件的区别

focusforce 2010-12-23 02:55:59
where FIND_IN_SET(TC.storeId,'4,24,56') or FIND_IN_SET(TC.storeId,TC.poolStoreId)

where FIND_IN_SET(TC.storeId,CONTACT('4,24,56',TC.poolStoreId))

请问他们之间的区别是什么?由哪个函数导致的?
...全文
64 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
focusforce 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 acmain_chm 的回复:]
你的两个语句 #7楼 #8楼 的语义都不同,这样谈不上效率。不一样的东西,没什么可比的。
[/Quote]

貌似明白你的意思了,可能使用列明将你带入了误区?poolStoreId是varchar类型的,就是'4,5,24,'这种的字符串,不是一个int型的数值。
focusforce 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 acmain_chm 的回复:]
你的两个语句 #7楼 #8楼 的语义都不同,这样谈不上效率。不一样的东西,没什么可比的。
[/Quote]
顶楼的是笔误,少了个逗号,没少括号啊,后面的条件并不影响问题的主题。
select * from T_CUSTOMER TC
where
(
FIND_IN_SET(TC.storeId,'4,5,24,')
or
FIND_IN_SET(TC.storeId,TC.poolStoreId)
)
and registDate>='2010-12-01'
and registDate<='2010-12-31'

select * from T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,'4,24,56') or FIND_IN_SET(TC.storeId,TC.poolStoreId)
and registDate>='2010-12-01'
and registDate<='2010-12-31'
有区别吗?效率一问是针对5楼的。谢谢解惑!
ACMAIN_CHM 2010-12-23
  • 打赏
  • 举报
回复
你的两个语句 #7楼 #8楼 的语义都不同,这样谈不上效率。不一样的东西,没什么可比的。
focusforce 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 acmain_chm 的回复:]
select * from T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,'4,5,24,')
or FIND_IN_SET(TC.storeId,TC.poolStoreId)
and registDate>='2010-12-01'
and registDate<='2010-12-31'

你的这句和顶楼的主义不同!
……
[/Quote]
不是的,我找到原因了,是TC.poolStoreId为null的那些记录娶不到,晕死啊。
select
*
from
T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,concat('4,5,24,',ifnull(TC.poolStoreId,'')))
and registDate>='2010-12-01'
and registDate<='2010-12-31'

这样就可以了。

请问哪一句效率高一些?
ACMAIN_CHM 2010-12-23
  • 打赏
  • 举报
回复
select * from T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,'4,5,24,')
or FIND_IN_SET(TC.storeId,TC.poolStoreId)
and registDate>='2010-12-01'
and registDate<='2010-12-31'

你的这句和顶楼的主义不同!
少了一个括号。
体会一下这个语句加上括号后的不同。
select * from T_CUSTOMER TC
where
(
FIND_IN_SET(TC.storeId,'4,5,24,')
or
FIND_IN_SET(TC.storeId,TC.poolStoreId)
)
and registDate>='2010-12-01'
and registDate<='2010-12-31'
focusforce 2010-12-23
  • 打赏
  • 举报
回复
select
*
from
T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,concat('4,5,24,',TC.poolStoreId))
and registDate>='2010-12-01'
and registDate<='2010-12-31'

2 rows fetched in 0.0134s
focusforce 2010-12-23
  • 打赏
  • 举报
回复
select * from T_CUSTOMER TC
where
FIND_IN_SET(TC.storeId,'4,5,24,')
or FIND_IN_SET(TC.storeId,TC.poolStoreId)
and registDate>='2010-12-01'
and registDate<='2010-12-31'

30 rows fetched in 0.0174s
focusforce 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fxs_2008 的回复:]
有区别吗?
从程序的角度讲,第一个要比第二个执行效率高

因为第一个只要首个条件满足即个,而第二个要先连一遍。
[/Quote]
感觉第二个效率更高,FIND_IN_SET算是效率比较低的运算吧?使用两次何不只用一次。

两个结果不一样的,我马上例子。
fxs_2008 2010-12-23
  • 打赏
  • 举报
回复
有区别吗?
从程序的角度讲,第一个要比第二个执行效率高

因为第一个只要首个条件满足即个,而第二个要先连一遍。
ACMAIN_CHM 2010-12-23
  • 打赏
  • 举报
回复
如果加上逗号,则两者应该一样。

where FIND_IN_SET(TC.storeId,CONTACT('4,24,56,',TC.poolStoreId))
wwwwb 2010-12-23
  • 打赏
  • 举报
回复
举例说明,结果应该是一样的
focusforce 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
什么地方不明白,第2个是在TC.poolStoreId内容前加上'4,24,56',
如poolStoreId为1
'4,24,561'
[/Quote]
不好意思,是我写掉了一个“,”。就是在有逗号的情况下,两个查询的结果不一样,所以不理解。
wwwwb 2010-12-23
  • 打赏
  • 举报
回复
什么地方不明白,第2个是在TC.poolStoreId内容前加上'4,24,56',
如poolStoreId为1
'4,24,561'

56,679

社区成员

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

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