首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有记录链接的SurrealDB中执行联接

如何在没有记录链接的SurrealDB中执行联接
EN

Stack Overflow用户
提问于 2022-09-25 17:43:53
回答 1查看 223关注 0票数 0

SurrealDB文档指出,通过使用记录链接来替换联接的概念。但是,是否仍然可以基于任意列连接表?

考虑以下表格:

代码语言:javascript
复制
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'
;

是否可以编写查询以获得以下结果(而不更改底层数据模型)?

代码语言:javascript
复制
"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"
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-29 00:09:49

在SurrealDB中确实有一种使用SPLIT连接数据的方法。

连接两个表usermotto的查询如下所示:

SurrealDB

代码语言:javascript
复制
SELECT id, name, favouriteDay, motto.motto as motto 
FROM (
    SELECT *, (SELECT * FROM motto) as motto 
    FROM user 
    SPLIT motto 
) 
WHERE favouriteDay = motto.day;

SQL-equivalent

代码语言:javascript
复制
SELECT id, name, favouriteDay, motto
FROM user JOIN motto ON user.favouriteDay = motto.day

解释

我们首先查询所有用户,并将每个用户的座右铭添加到每个用户。

代码语言:javascript
复制
SELECT *, (SELECT * FROM motto) as motto FROM user

然后,我们可以使用SPLIT将每个usermotto数组中的每个元素展开到一个单独的行。

代码语言:javascript
复制
SELECT *, (SELECT * FROM motto) as motto FROM user SPLIT motto 

最后,我们接受这个查询的结果,过滤favouriteDaymotto.motto匹配的所有行。我们还从motto对象中取出motto字符串,将输出格式化为所需的结果。

代码语言:javascript
复制
SELECT id, name, favouriteDay, motto.motto as motto FROM (
    SELECT *, (SELECT * FROM motto) as motto FROM user SPLIT motto 
) 
WHERE favouriteDay = motto.day;
代码语言:javascript
复制
[
   {
      "favouriteDay":"Monday",
      "id":"user:1",
      "motto":"Best day of the week",
      "name":"User1"
   },
   {
      "favouriteDay":"Tuesday",
      "id":"user:2",
      "motto":"Second best day of the week",
      "name":"User2"
   }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73846603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档