有个用户表,如下:
id   name   manager1   manager2  manager3
1     张三         A                  B                C
2     李四         E                   A               D要求查找管理者123中有A的数据。有没有好的查询方式或者把三个字段通过算法合并成一个字段,然后再进行查询?
哪种效率高?有什么算法可以实现?

解决方案 »

  1.   

    col1='A' or col2='A' or col3='A'
      

  2.   

    1楼正解
    select * from 表名 where  manager1=‘A’or  manager2=‘A’or  manager3=‘A'
      

  3.   

    manager1=‘A’or  manager2=‘A’or  manager3=‘A' 效率低下,有没有其他好的方式。
      

  4.   

    如果这三个列都有索引,会自动优化,如果其中任意一个列没有索引,会全表扫描
    都有索引等价于
    select * from 表名 where  manager1=‘A’union  
    select * from 表名 where  manager2=‘A’union 
    select * from 表名 where  manager3=‘A'
      

  5.   

    or 换成union all 写法 效率要好点
      

  6.   

    or不等价union all,应该换成union
    而且关键还是索引,任何一个字段没有索引,都需要全表扫描
    如果两个或者三个字段没有索引,or需要全扫描一次,union需要扫描2-3次