表多列外键关联同一角色表,能否仅关联一次获取关联名称?
关于一次关联获取双角色名称的问题
没办法只用一次JOIN就拿到这两个角色的名称,因为role_relations里的id和parent_id是两个独立的关联,分别指向roles表中不同的角色记录——一个是当前角色,一个是其父角色,逻辑上就需要两次关联才能分别拉取对应的名称。
你现在用的两次JOIN的写法其实是标准且高效的,只要roles表的id字段建了索引,这个查询的性能完全没问题,不用刻意追求“一次关联”。
当然也可以用子查询的写法替代,但本质还是两次查询逻辑,性能通常不如JOIN,比如:
SELECT (SELECT name FROM roles WHERE id = rr.id) AS role_name, (SELECT name FROM roles WHERE id = rr.parent_id) AS parent_role_name FROM role_relations rr WHERE rr.role_relation_id = :rrId;
综上,你的原SQL写法就是最优解,不用改动。
内容的提问来源于stack exchange,提问作者Datha
相关产品推荐
相关产品推荐

