zoukankan      html  css  js  c++  java
  • mysql中的IN和FIND_IN_SET的区别与应用——>mysql学习笔记

     
    原来以为mysql可以进行这样的查询
    select id, list, name from table where 'daodao' IN (list);      (一)
    注:1. table含有三个字段id:int,  list:varchar(255),  name:varchar(255) 】
     
     实际上这样是不行的,这样只有当'daodao'是list中的第一个元素(我测试的时候貌似是第一个也是不行的,只有当list字段的值等于daodao时才是对的)时,查询才有效,否则都的不到结果,即使'daodao'真的再list中
     
     1 测试代码:
     2 CREATE TABLE `test` (
     3   `id` int(8) NOT NULL auto_increment,
     4   `name` varchar(255) NOT NULL,
     5   `list` varchar(255) NOT NULL,
     6   PRIMARY KEY  (`id`)
     7 )
     8 
     9 INSERT INTO `test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
    10 INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
    11 INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');
     
    test1:sql = select * from `test` where 'daodao' IN (`list`);
    得到结果空值.
    test2:sql = select * from `test` where FIND_IN_SET('daodao',`list`);
    得到三条数据。
    1  1     name     daodao,xiaohu,xiaoqin
    2  2     name2     xiaohu,daodao,xiaoqin
    3  3     name3     xiaoqin,daodao,xiaohu
    修改表数据
    update `test` set `list`='daodao' where `id`='1';
    然后执行test1的sql,可以返回一条结果。 
    再来看看这个:
    select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');    (二)
    这样是可以的
    ---------------------------------------------------------

    这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。

    原因其实是(一)中 (list)    list是变量, 而(二)中  ('libk', 'zyfon', 'daodao')是常量

    所以如果要让(一)能正确工作,需要用find_in_set():
    select id, list, name from table where FIND_IN_SET( 'daodao' , list);  (一)的改进版。
     
    总结:所以如果list是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数
     
     
  • 相关阅读:
    linux内核中的crng是什么?
    linux内核中的hisi_sas是什么?
    linux内核中的brd是什么?
    内核中的xenfs是什么?
    linux内核中的cfq输入输出调度算法
    linux内核中的最简单的输入输出调度算法noop
    linux内核中侧async_tx是什么?
    linux内核中的fuse是什么?
    Executors.newSingleThreadScheduledExecutor();线程池中放入多个线程问题
    Executors.newSingleThreadScheduledExecutor() 问题
  • 原文地址:https://www.cnblogs.com/logon/p/2741076.html
Copyright © 2011-2022 走看看