google-cloud-spanner - 如何实现 UNNSET(SELECT NAME FROM NAMES); 在扳手
问题描述
Select * Id IN UNNSET(@IDS)
和
UNNSET(SELECT NAME FROM NAMES);
在此查询UNNEST(@IDS)
中,我将 IDS 作为 List<String> 传递。但UNNSET(SELECT NAME FROM NAMES)
不是在扳手中工作。我怎样才能在扳手中实现这个?
解决方案
对您的问题的一个小评论是您拼写错误UNNEST
(as 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"));
}
}