问题描述
Select * Id IN UNNSET(@IDS)
和
UNNSET(SELECT NAME FROM NAMES);
在这个查询中,UNnesT(@IDS)
正在工作,因为我将 IDS 作为 ListUNNSET(SELECT NAME FROM NAMES)
在扳手中不起作用。我如何在扳手中实现它?
解决方法
对您的问题的一个小评论是您拼错了 UNNEST
(如 UNNSET
)。提问时我会假设这是一个错误,所以我会忽略它。
鉴于以下架构:
CREATE TABLE Names (
Id INT64 NOT NULL,Names ARRAY<STRING(MAX)> NOT NULL,) PRIMARY KEY(Id);
CREATE TABLE SingleNames (
Id INT64 NOT NULL,Name STRING(MAX),) PRIMARY KEY(Id)
我们可以像这样执行 IN
查询:
SELECT *
FROM SingleNames
WHERE Name IN UNNEST((SELECT n.Names FROM Names n WHERE n.Id = 1))
注意 UNNEST
调用中的双括号,这是必需的,以便将查询解释为表达式(这是 UNNEST
调用的必需参数)。
我们可以像这样使用 Java 客户端查询:
try (ResultSet rs = databaseClient
.singleUse()
.executeQuery(Statement
.newBuilder("SELECT * FROM SingleNames WHERE Name IN UNNEST((SELECT n.Names FROM Names n WHERE n.Id = @id))")
.bind("id")
.to(1L)
.build())
) {
while (rs.next()) {
System.out.println(rs.getLong("Id") + "," + rs.getString("Name"));
}
}