如何确定列表是否至少有一个相同的元素

How to determine if lists have at least one same element

产品 table 包含标签列:

create table product(
  product char(20) primary key,
  tag1 char(100),
  tag2 char(100) )

标签列包含用分号分隔的标签,如

AB;AC;AD
RXX;AC;XAD
RP12;X455;R444;AXD

如何查找 tag1 和 tag2 列至少包含一个相同标记的所有行?

例如行

tag1        tag2
AB;AC;AD    RXX;ZAC;XAD;AC

应该在结果中,因为两列都包含 AC

tag1        tag2
AB;XAC;AD    RXX;ZAC;XAD;AC

不应出现在结果中,因为所有标签都不同。

使用 PostgreSQL 13.2

您可以使用 && 运算符来检查列中是否存在公共元素。为此,您必须首先使用 string_to_array

将字符串转换为数组
SELECT * FROM my_table WHERE  (string_to_array(tag1,';')::text[]) && (string_to_array(tag2,';')::text[])

演示在 DBfiddle