码兄 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 如何证明高斯噪声的包络公式
  • ¥150 寻找王者荣耀开发作者,合作或者解答
  • ¥15 乳腺癌数据集 相关矩阵 特征选择
  • ¥15 我的游戏账号被盗取,请问我该怎么做
  • ¥15 通关usb3.0.push文件,导致usb频繁断连
  • ¥15 有没有能解决微信公众号,只能实时拍照,没有选择相册上传功能,我不懂任何技术,,有没有给我发个软件就能搞定的方法
  • ¥15 Pythontxt文本可视化
  • ¥15 如何基于Ryu环境下使用scapy包进行数据包构造
  • ¥15 springboot国际化
  • ¥15 搭建QEMU环境运行OP-TEE出现错误