如何实现 UNNSET(SELECT NAME FROM NAMES);在扳手

问题描述

Select * Id IN UNNSET(@IDS)

UNNSET(SELECT NAME FROM NAMES);

在这查询中,UNnesT(@IDS) 正在工作,因为我将 IDS 作为 List 传递。但是 UNNSET(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"));
    }
  }