为了账号安全,请及时绑定邮箱和手机立即绑定

mysql多表连续查询的问题

mysql多表连续查询的问题

PHP
30秒到达战场 2019-03-11 04:22:19
id name relation 1 n1 r1 2 n2 r2 3 n4 r1 4 n5 r1 5 n6 r2 6 n6 r1 表relation关系如上所示 其中relation字段,标示当前行与其他行的name字段之间的关系。比如name=n1与name=n4,name=n5,name=n6的数据,通过r1产生了一个“一次连接关系”。name=n2与name=n6的数据,通过r2产生了一个“一次连接关系”。n1与n2,分别通过r1和r2,与n6产生连接,那么我这边会定义n1与n2为“二次连接的关系” 现在我要通过sql查寻他们之前是否是“二次连接的关系” 利用thinkphp写的sql查询如下: $where['jump_table.name'] = 'n1'; $where['land_table.name'] = 'n2'; $jump = M('relation')->alias('switch_table') ->join('LEFT JOIN relation AS jump_table ON switch_table.relation = jump_table.relation') ->join('LEFT JOIN relation AS land_table ON switch_table.relation = land_table.relation') ->where($where) ->field('switch_table.name') ->select(); 这样查询出来的结果是空。求大神赐教,这个sql该怎么写。
查看完整描述

4 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

那么n1与n2就产生了一个二次连接的关系。 这句话看不懂是什么意思

查看完整回答
反对 回复 2019-03-18
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

咳咳,我大致理解下你的这个表关系,即 R1 是同属级,同属级之间进行连接。但如果出现用户 N6 即同属 R1 级别又同属 R2 级别,则连接,并且 N6 所属的 R1 级别以及 R2 级别的所有成员也都互相成为连接关系?

查看完整回答
反对 回复 2019-03-18
?
隔江千里

TA贡献1906条经验 获得超10个赞

尝试写个sql语句:

select name
from t
where t.relation in (
  select relation from t where t.name in ('n1', n2')
)
group by name 
having count(*) >= 2
where name not in ('n1', n2')

如果上面的语句有返回结果,代表存在二次连接关系

查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 604 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信