码迷,mamicode.com
首页 > 数据库 > 详细

SQL语句中find_in_set、like、in的区别及使用方法

时间:2018-08-27 21:52:32      阅读:995      评论:0      收藏:0      [点我收藏+]

标签:模糊   raw   span   csdn   使用   模糊查询   基本语法   sina   Fix   

摘自 https://blog.csdn.net/sunny1660/article/details/78613000

 

find_in_set(str,strlist)函数

    str  要查询的字符串

      strlist  字段名, 参数以“,”分割  如(1,2,3,4)

     查询字段(strlist)中包含(str)的结果,返回结果为null,或者记录。

基本语法使用

   1、in查询相当于多个or条件的叠加。例如:

         select  *  from  user  where  user_id  in  (1,2,3);

        等效于

         select  *  from  user  where  user_id = 1 or user_id = 2 or user_id = 3

        not  in 与 in相反

     2、+---+--------+

          | id | follow_id |

          +----+-------+

          |   1 | 14,15 |

           | 2  |  13       |

         这时,select  * from  test where  find_in_set(‘5‘,follow_id);这样是查不到的,返回值为null,因为follow_id中没有“5”这个值,它不同于like模糊查询,它是以“,”来分割。

         如果使用like查询,查询结果为id=1的一条记录。

sql中like用法,可以参考 :http://blog.sina.com.cn/s/blog_a74f39a201018jal.html

总结:

 

find_in_set与like的区别

     like是广泛的模糊匹配,字符串中没有分隔符,find_in_set是精确匹配,字段值以英文“,”分隔,find_in_set查询的结果要小于like查询的结果。

find_in_set与in的区别

     select * from table_name  where  ‘test‘ in (list);

        select * from table_name  where  find_in_set(‘test‘,list);

 

res1 = Author.objects.raw(raw_query=‘SELECT id FROM book_author WHERE FIND_IN_SET(%s,name)‘,params=[‘11‘])

# <RawQuerySet: select * from book_author WHERE FIND_IN_SET("11",name)>
res2 = Author.objects.extra(where=[‘FIND_IN_SET(%s,name)‘],params=[‘11‘,])

# <QuerySet [<Author: 1,11,12>, <Author: 22,21,2,11>]>

        所以如果list是常量,则直接用in;如果list是变量,则要使用find_in_set()函数。

SQL语句中find_in_set、like、in的区别及使用方法

标签:模糊   raw   span   csdn   使用   模糊查询   基本语法   sina   Fix   

原文地址:https://www.cnblogs.com/ALXPS/p/9541779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!