【问题标题】:rethinkdb eqJoin on multiple fields在多个字段上重新思考 eqJoin
【发布时间】:2018-11-14 18:58:07
【问题描述】:

我想在两个非常大的表上使用连接运行查询。 此 sql 的等效 rethinkdb 语法是什么?

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));

【问题讨论】:

    标签: rethinkdb rethinkdb-python


    【解决方案1】:

    快速而肮脏的解决方案是:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多