rethinkdb - 在多个字段上重新思考 eqJoin
问题描述
我想在两个非常大的表上使用连接运行查询。此 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));
解决方案
快速而肮脏的解决方案是:
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()
推荐阅读
- mongodb - Kubernetes 中的多个 mongo 命令不起作用
- excel - Range.Address 在公式中使用时被截断(字符串太长)
- html - PrimeNg confirmDialog 在我的导航栏上进行更改
- javascript - Javascript - 谁最重?(访问具有相同键名的数组对象中的所有值)
- javascript - 使用 AngularJS 滚动到选择选项(焦点不适用于 Chrome、IE11)
- cypress - 我可以使用 cypress.io 用 jest 而不是 mocha 进行端到端测试吗?
- r - 匹配包含不同编码的引号的文本字符串
- python - 通过 Python shell 执行 Git 服务器命令
- docker - 通过Nginx反向代理获取客户端真实ip
- ruby-on-rails - 如何更改 simple_calendar gem 的日期