我有兩列ind和tar兩個包含陣列。
ind tar
{10} {10}
{6} {5,6}
{4,5,6} {5,6}
{5,6} {5,6}
{7,8} {11}
{11} {5,6,7}
{11} {8}
{9,10} {6}
我想找出兩個陣列中是否都存在一個值,如果這是真的,我只想將它保留在 column ind。例如,在第一行,我在兩列中都有值 10。我只想在列中使用此值ind并將列tar留空。這是預期的結果:
ind tar
{10}
{6} {5}
{4,5,6}
{5,6}
{7,8} {11}
{11} {5,6,7}
{11} {8}
{9,10} {6}
我怎樣才能在 PostgreSQL 中做到這一點?
到目前為止,我只設法找到了公共元素,但我不知道如何繼續將它們僅保留在ind列中并將它們從tar列中洗掉。
with t1 as (
select distinct ind, tar
from table_1
join table_2 using (id)
limit 50
),
t2 as (
select ind & tar as common_el, ind , tar
from t1
)
select *
from t2
結果如下:
common_el ind tar
{10} {10} {10}
{6} {6} {5,6}
{5,6} {4,5,6} {5,6}
{5,6} {5,6} {5,6}
uj5u.com熱心網友回復:
&您使用的運算子來自intarray模塊,該模塊還允許您用于-從另一個陣列中洗掉一個陣列中的元素。
例如。
select
ind,
tar,
ind & tar as common_el,
tar - (ind & tar) as new_tar
from
table_1
| 工業 | 柏油 | common_el | 新焦油 |
|---|---|---|---|
| {10} | {10} | {10} | {} |
| {6} | {5,6} | {6} | {5} |
| {4,5,6} | {5,6} | {5,6} | {} |
| {5,6} | {5,6} | {5,6} | {} |
| {7,8} | {11} | {} | {11} |
| {11} | {5,6,7} | {} | {5,6,7} |
| {11} | {8} | {} | {8} |
| {9,10} | {6} | {} | {6} |
在此處查看作業演示資料庫小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/349162.html
標籤:sql 数组 PostgreSQL
