mysql多表连续查询的问题

发布于 2022-09-07 19:27:22 字数 969 浏览 31 评论 0

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该怎么写。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

掌心的温暖 2022-09-14 19:27:22

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

冰雪梦之恋 2022-09-14 19:27:22

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

眼藏柔 2022-09-14 19:27:22

尝试写个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')

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

本王不退位尔等都是臣 2022-09-14 19:27:22

逻辑有点繁琐,凑活看吧,下面sql取到的name之间都是二次连接关系

select group_concat(aaa.gb) 
from (select 
case when left(replace(aa.gb,bb.name,''),1)=',' 
    then right(replace(aa.gb,bb.name,''),char_length(replace(aa.gb,bb.name,''))-1)
when right(replace(aa.gb,bb.name,''),1)=','
    then left(replace(aa.gb,bb.name,''),char_length(replace(aa.gb,bb.name,''))-1)
else replace(replace(aa.gb,bb.name,''),',,',',') end gb,bb.name 
from (select group_concat(name) gb from t group by relation having count(1)>1) aa,
(select name from t group by name having count(1)>1) bb
where find_in_set(bb.name,aa.gb)) aaa group by aaa.name;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文