码兄 2017-08-28 08:33 采纳率: 50%
浏览 2167
已采纳

mysql语句优化,in语句多表查询优化

比如我要查一张菜单表,想查询名字为‘product’和子菜单名字为‘product’的菜单,下面是我写的语句。
请问这种怎么用join才代替in,或者有没有别的办法让效率变得高点

select * FROM menu As m where m.name = 'product' or m.menuid in (SELECT parentid FROM menu where name='product')

语句只是做个比喻,因为业务比较复杂,所以随便写个例子

  • 写回答

7条回答 默认 最新

  • 光明下的影子 2017-08-28 09:08
    关注

    首先我根据你的SQL理解一下你的业务逻辑
    select *
    from menu m
    where m.name = 'product'
    or m.menuid in (select parentid from menu where name = 'product');

    用or就是2个数据都想要
    第一种是:menu表中 name = 'product' 的数据
    第二种是:menu表中 menuid in (select parentid from menu where name = 'product')的数据,in中的表和in外的表是同一个表

    拆分成2个SQL,就是这样
    select m.*
    from menu m
    where m.name = 'product';

    select t1.*
    from menu t1
    left join menu t2
    on t1.menuid = t2.parentid
    where t2.name = 'product';

    大概理解你的SQL是想查这两种数据,合并在一个结果集里边……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序