2

我的 AWS QLDB 表中有下表:

INSERT INTO Testing << {
    'MyId': 1,
    'MyList': [ 'Item1', 'Item2', 'Item3']
},
{
    'MyId': 2,
    'MyList': [ 'Item2', 'Item3', 'Item4']
},
{
    'MyId': 3,
    'MyList': [ 'Item4', 'Item5', 'Item6']
}
>>

我需要能够获取包含项目列表(不是来自另一个表)的所有文档,我正在使用以下查询:

SELECT *
FROM Testing AS t,
     t.MyList AS l
WHERE l IN ('Item1', 'Item2', 'Item4')

但是,这给出了以下输出

+------+---------------------------+---------+
| MyId | MyList                    | _3      |
+------+---------------------------+---------+
| 3    | ["Item4","Item5","Item6"] | "Item4" |
+------+---------------------------+---------+
| 1    | ["Item1","Item2","Item3"] | "Item1" |
+------+---------------------------+---------+
| 1    | ["Item1","Item2","Item3"] | "Item2" |
+------+---------------------------+---------+
| 2    | ["Item2","Item3","Item4"] | "Item2" |
+------+---------------------------+---------+
| 2    | ["Item2","Item3","Item4"] | "Item4" |
+------+---------------------------+---------+

我希望能够得到三个不同的行。它会根据我在尝试使用DISTINCTQLDB 不支持它时遇到的错误出现,但我也更喜欢*在我的中使用SELECT,所以我正在尝试使用GROUP BY

SELECT *
FROM Testing AS t,
     t.MyList AS l
WHERE l IN ('Item1', 'Item2', 'Item4')
GROUP BY t.MyId

但这会产生以下错误:

开始查询错误
语义错误:在行,列:没有名为'$__partiql__group_by_1_item_0'的变量;没有名为“$__partiql__group_by_1_item_0”的变量(服务:AmazonQLDBSession;状态代码:400;错误代码:BadRequestException;请求 ID:65vrQHytqHdEL3o9Ym9Xn4)

4

1 回答 1

2

QLDB 目前既不支持DISTINCT也不支持,如SELECT 参考中的省略所示。不幸的是,在这种情况下,错误消息具有误导性。GROUP BY

假设您的MyId列本身是唯一的,您可以通过检查列表中是否包含每个项目来过滤列表来表达您想要的内容,例如:

SELECT *
FROM Testing AS t
WHERE 'Item1' IN t.MyList OR 'Item2' IN t.MyList OR 'Item3' IN t.MyList

如果您想进一步过滤生成的列表,您可以添加一个嵌套SELECT的原始过滤器,如下所述

SELECT t.MyId, (SELECT VALUE l FROM t.MyList WHERE l IN ('Item1', 'Item2', 'Item3'))
FROM Testing AS t
WHERE 'Item1' IN t.MyList OR 'Item2' IN t.MyList OR 'Item3' IN t.MyList

虽然这有点尴尬,但您可能无论如何都不想这样做,因为当for each包含在其中时,它GROUP BY会在整个数据集中进行分组(需要完整的聚合) 。itemst

于 2020-04-03T00:02:13.787 回答