Левый запрос на соединение с rethinkDB - PullRequest
0 голосов
/ 02 мая 2018

У меня есть две таблицы, users и authors. Пользователь может быть автором, и если это так, в документе автора есть id пользователя.

Я хочу запросить всех пользователей, которые НЕ являются авторами. Эквивалентный запрос mySQL будет выглядеть примерно так:

select * from users left join authors on users.id=authors.userId
where authors.userId is null

То, что я пробовал, это

r.db('journa').table('authors').outerJoin(
  r.db('journa').table('users'),
  (author, user) => {
    return author.hasFields({'left': 'claimedByUserId'}).not()
  }
)

Но это не работает. Есть идеи, как этого добиться?

1 Ответ

0 голосов
/ 02 мая 2018

Вы были почти на правильном пути. Вы не должны инвертировать в выражении соединения, потому что оно вернет набор всех несовпадающих перестановок, и вы не сможете обнаружить требуемое совпадение. Следующий запрос, кажется, выполняет то, что вам нужно:

r.db('journa')
    .table('users')
    .outerJoin(
        r.db('journa').table('authors'),
        // This is what two sequences are joined upon
        (user, author) => user('id').eq(author('userId'))
    )
    // Joins return `left` and `right`.
    // If there's nothing at the right side, we assume there was no match
    .filter((lr) => lr.hasFields('right').not())
    // Extracting the left table record only
    .map((lr) => lr('left'))
...