gpt4 book ai didi

sql - 比较 PostgreSQL 中两个逗号分隔的列

转载 作者:行者123 更新时间:2023-11-29 12:50:31 25 4
gpt4 key购买 nike

我有两个表,其中一列包含以逗号分隔的数据。我需要比较两列。逗号分隔的字段可以按任何顺序排列,但顺序无关紧要。

create table x_a (id1 integer, shared text);
create table x_b (id1 integer, shared text);

insert into x_a values
(1, 'A,B,C,D,E')
, (2, 'A,B,C,D,E');

insert into x_b values
(1, 'B,A,C,E,D')
, (2, 'B,A,C,E');

我使用了下面的查询,但它没有返回任何输出:

select a.id1,b.id1, a.shared, b.shared
from x_a a ,x_b b
where a.id1 = b.id1
and regexp_split_to_array(LOWER(a.shared),',')
= regexp_split_to_array(LOWER(b.shared),',')

我不能使用运算符 &&,因为它会返回 id=2,这是错误的,因为“共享”列不是准确的副本。

最佳答案

I cannot use the operator && as it will return id=2 which is wrong ...

但您可以使用 array operators @> and <@ 像这样:

SELECT id1, a.shared AS a_shared, b.shared AS b_shared
FROM x_a a
JOIN x_b b USING (id1)
WHERE string_to_array(a.shared, ',') @> string_to_array(b.shared, ',')
AND string_to_array(a.shared, ',') <@ string_to_array(b.shared, ',');

如果 A 包含 B,而 B 包含 A,则两者相等 - 忽略重复项。

您可能希望首先存储(排序的)数组 - 或者使用 1:n 关系规范化您的数据库设计。

如果你的元素是integer数字,请考虑额外的 intarray 模块以获得卓越的性能。见:

关于sql - 比较 PostgreSQL 中两个逗号分隔的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55238337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com