比如我要查一张菜单表,想查询名字为‘product’和子菜单名字为‘product’的菜单,下面是我写的语句。
请问这种怎么用join才代替in,或者有没有别的办法让效率变得高点
select * FROM menu As m where m.name = 'product' or m.menuid in (SELECT parentid FROM menu where name='product')
语句只是做个比喻,因为业务比较复杂,所以随便写个例子
比如我要查一张菜单表,想查询名字为‘product’和子菜单名字为‘product’的菜单,下面是我写的语句。
请问这种怎么用join才代替in,或者有没有别的办法让效率变得高点
select * FROM menu As m where m.name = 'product' or m.menuid in (SELECT parentid FROM menu where name='product')
语句只是做个比喻,因为业务比较复杂,所以随便写个例子
首先我根据你的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是想查这两种数据,合并在一个结果集里边……