在数据库中有这么一张表A,有个字段是subcontractor_ids记录了多个分包商的Id,中间用逗号隔开。
另一张表B记录的是所有分包商,此时数据是一对多的情况。
用到的函数是regexp_split_to_table()先将字符串分割成列表,再通过string_agg把字符拼接起来,这边 记录一下sql该怎么写。
查询语句和查询的条件如下:
SELECT
A.ID,
A.NAME,
A.subcontractor_ids,
(
SELECT
string_agg ( NAME || '', ',' )
FROM
B
WHERE
B.ID :: VARCHAR IN ( SELECT * FROM regexp_split_to_table( A.subcontractor_ids, ',' ) )
)
FROM A
WHERE 1 = 1
AND string_to_array( A.subcontractor_ids, ',' ) @> ARRAY [ '2','1']
注意:如果是写在mapper.xml里要在条件查询最后加上::text[],否则查询会报错
string_to_array( A.subcontractor_ids, ',' ) @> ARRAY [ '2','1']::text[]