是否有可能查询列表中的元素?

问题描述:

我知道嵌入的JSON值可以在SQL和红移中查询。 (通过像json_extract_path_text这样的函数)是否有可能查询列表中的元素?

但是有可能拥有一个嵌入的事物列表,然后查询它吗?例如说我有这个表:

fruit people_who_like_it 
apples  {[Brian]} 
oranges  {[Susan, Brian]} 
bananas  {[Freddy]} 

有没有一种方法来构造查询发现,布赖恩喜欢所有的水果?

你试过:

SELECT fruit 
FROM yourTable 
WHERE people_who_like_it LIKE '%Brian%'; 

这应该给你,布莱恩喜欢的任何水果。

UPDATE:

为了得到结果为布赖恩精确匹配,如在评论中指出,你可以尝试:

SELECT fruit 
FROM yourTable 
WHERE people_who_like_it LIKE '%[Brian]%' 
OR people_who_like_it LIKE '% Brian]%' 
OR people_who_like_it LIKE '% Brian,%' 
OR people_who_like_it LIKE '%[Brian,%'; 

有四种可能性,布莱恩的精确匹配可能看起来像包括:

“[布赖恩]”

“布赖恩]” < --preceding空间

“布赖恩,” < --preceding空间

“[布赖恩,”

+0

嗯,这将适用于这个例子,所以+1。尽管如果例如一个人被命名为'Cooper',另一个'Coop'会被打破。 –

如果你能说字符串转换成JSON字符串比你可以使用 JSON_EXTRACT_ARRAY_ELEMENT_TEXT功能:

https://docs.aws.amazon.com/redshift/latest/dg/JSON_EXTRACT_ARRAY_ELEMENT_TEXT.html