mysql,a表如何使用b表的列作为where条件,下有详细

图片说明

图片说明

这里有两个表,第一个表是表a,第二个表是表b,他们两个有个共同的列是id。
现在表b里面有一个lft和一个rgt,我想在表a里面找到符合
lft>=b.lft and rgt<=b.rgt
这个条件的条目,比如表b中lft为37,rgt为40的条目,我想在表a中找出
lft为37,rgt为38
lft为39,rgt为40的两条条目
有这样的写法吗?应该如何用一条语句写出来呢?

我想用a表和b表连起来,但是这样也做不到。想了很久,希望大家不吝赐教!

select * from a left join b on a.id=b.id where a.lft>=b.ift and a.rgt>=b.rgt

select a.id,name,a.lft,a.rgt from a left join b on a.id=b.id where a.lft>=b.lft and a.rgt<=b.rgt and b.lft IS NOT NULL and b.rgt IS NOT NULL

如果ab两个表没有直接的关联关系,那么久换种写法

 select * from a as a where a.lft =(
 select  b.lft from b as b where 筛选条件
 ) 
 or 
  a.rgt =(
 select  b.rgt from b as b where 筛选条件
 ) 

这是子查询的方式。

 select * from a as a 
 left join b as b
 on
  b.lft = a.lft or b.rgt = a.rgt
    where 
    筛选条件

自己尝试下这些写法

select a.* from a, b where a.id = b.id and a.lft>=b.lft and a.rgt<=b.rgt

SELECT a.* FROM a
INNER JOIN b
ON a.id=b.id AND a.lft>=b.lft AND a.rgt<=b.rgt

select a.* from a, b where a.id = b.id and a.lft>=b.lft and a.rgt<=b.rgt

select * from a as a left join b as b on a.id = b._aid where b.name like '%测试%'

好了,现在才想起来这个问题的关键,请问你这两个表的关系是什么样的?一对多?

a表中添加一个和b表的关联字段 就可以使用where了