Postgresql - 来自 jsonb 数组的不同值
Postgresql - distinct values from jsonb array
我有以下 jsonb 数组列(标签)
|name | tags (jsonb) |
--------------------------------
|john | [ "foo", "bar" ]
|smith| [ "bar", "bat" ]
|adam | [ "foo", "dot" ]
如何获取不同的标签如下
["foo", "bar", "bat", "dot"] ?
这将解决您的特定问题。
SELECT DISTINCT tag FROM
(SELECT name, JSONB_ARRAY_ELEMENTS(tags) as b FROM my_table) AS foo;
但是你有一个更大的问题。像这样存储标签是一个经常重复的错误。你应该规范你的 table。请参阅
接受的解决方案有效,但可以简化:
SELECT DISTINCT JSONB_ARRAY_ELEMENTS_TEXT(tags) AS tag FROM yourtable;
另外,虽然在很多情况下这确实是一种反模式,但只要您意识到它的缺点(加入和搜索将更加困难),它仍然可以有效使用。
我有以下 jsonb 数组列(标签)
|name | tags (jsonb) |
--------------------------------
|john | [ "foo", "bar" ]
|smith| [ "bar", "bat" ]
|adam | [ "foo", "dot" ]
如何获取不同的标签如下 ["foo", "bar", "bat", "dot"] ?
这将解决您的特定问题。
SELECT DISTINCT tag FROM
(SELECT name, JSONB_ARRAY_ELEMENTS(tags) as b FROM my_table) AS foo;
但是你有一个更大的问题。像这样存储标签是一个经常重复的错误。你应该规范你的 table。请参阅
接受的解决方案有效,但可以简化:
SELECT DISTINCT JSONB_ARRAY_ELEMENTS_TEXT(tags) AS tag FROM yourtable;
另外,虽然在很多情况下这确实是一种反模式,但只要您意识到它的缺点(加入和搜索将更加困难),它仍然可以有效使用。