首页 > 解决方案 > 如何实现 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)不是在扳手中工作。我怎样才能在扳手中实现这个?

标签: google-cloud-spanner

解决方案


对您的问题的一个小评论是您拼写错误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"));
    }
  }

推荐阅读