rethinkdb eqJoin для нескольких полей - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу выполнить запрос, используя соединение двух очень больших таблиц. Каков эквивалентный синтаксис rethinkdb для этого sql?

SELECT t1.uuid,t1.timestamp,t2.name
FROM t1
JOIN t2 ON t1.uuid=t2.uuid AND t1.timestamp=t2.timestamp

Для примера, это sql для таблиц:

CREATE TABLE t1(
    id INT NOT NULL AUTO_INCREMENT,
    uuid CHAR(30) NOT NULL,
    timestamp CHAR(30) NOT NULL,
    PRIMARY KEY(id)) ENGINE=INNODB;


CREATE TABLE t2(
    id INT NOT NULL AUTO_INCREMENT,
    uuid CHAR(30) NOT NULL,
    timestamp CHAR(30) NOT NULL,
    name CHAR(30) NOT NULL,
    PRIMARY KEY(id));

1 Ответ

0 голосов
/ 15 ноября 2018

Быстрое и грязное решение будет:

r.table("t1").innerJoin(
  r.table("t2"),
  function (doc1, doc2) {
    return doc1("uuid").eq(doc2("uuid"))
        .and(doc1("timestamp").eq(doc2("timestamp")));
}).zip()

Но вы можете создать составной индекс для этих полей

r.table("t1").indexCreate(
    "myIndex", [r.row("uuid"), r.row("timestamp")])


r.table("t2").indexCreate(
    "myIndex", [r.row("uuid"), r.row("timestamp")])


r.table("t1").eqJoin(
    "myIndex",
    r.table("t2"),
    {index: "myIndex"}
).zip()
...