这里有两个表,第一个表是表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了