如何在SurrealDB中不使用记录链接实现表连接?
SurrealDB 基于任意列实现表连接的解决方案
问题描述
SurrealDB文档指出,JOIN的概念被记录链接(Record links)替代,但仍能否基于任意列实现表连接?
现有如下表结构:
CREATE user:1 SET name = 'User1', favouriteDay = 'Monday' ; CREATE user:2 SET name = 'User2', favouriteDay = 'Tuesday' ; CREATE motto:1 SET day = 'Monday', motto = 'Best day of the week' ; CREATE motto:2 SET day = 'Tuesday', motto = 'Second best day of the week' ;
能否在不修改底层数据模型的前提下编写查询,得到如下结果?
"result": [ { "favouriteDay": "Monday", "id": "user:1", "name": "User1", "motto": "Best day of the week" }, { "favouriteDay": "Tuesday", "id": "user:2", "name": "User2", "motto": "Second best day of the week" } ]
解决方案
可以实现。SurrealDB虽然主推记录链接,但依然支持基于任意列的关联查询,无需修改现有数据模型。以下两种写法均可满足需求:
方法一:子查询关联
SELECT user.*, (SELECT motto FROM motto WHERE motto.day = user.favouriteDay) AS motto FROM user;
通过子查询匹配user表的favouriteDay与motto表的day字段,将对应格言作为字段返回。
方法二:多表关联查询
SELECT u.id, u.name, u.favouriteDay, m.motto FROM user u, motto m WHERE u.favouriteDay = m.day;
直接在FROM子句中关联两张表,通过WHERE条件匹配列值,筛选出对应的数据并返回指定字段。
两种写法都能精准输出你需要的结果集,无需调整原有数据结构。
内容的提问来源于stack exchange,提问作者Tobias S.
相关产品推荐
相关产品推荐

