【postgresql在sql的基础上将frvcd按照逗号分割,核查两个表中frvcd数量是否相同】
postgresql语句:
SELECT a.rvcd, a.rvnm, a.frvcd, b.rvcd, b.rvnm, b.frvcd from
aaaa河南补充水库线 a
LEFT JOIN model_engineering_spatial_rivl b on a.rvcd = b.rvcd and b.engr_id = 137
ORDER BY b.rvcd asc
当前的 SQL 查询已经完成了两个表的 LEFT JOIN,现在需要 将 a.frvcd 和 b.frvcd 按逗号分割,统计分割后的数量,并判断是否相等。
在 PostgreSQL 中,可以使用:
string_to_array(frvcd, ‘,’):将字符串按逗号转为数组
array_length(…, 1):获取数组长度(即分割后的元素个数)
注意处理 NULL 和空字符串的情况
在以上基础上将frvcd按照逗号分割,核查两个表中frvcd数量是否相同
SELECT a.rvcd AS a_rvcd,a.rvnm AS a_rvnm,a.frvcd AS a_frvcd,b.rvcd AS b_rvcd,b.rvnm AS b_rvnm,b.frvcd AS b_frvcd,-- 分割后数量CASE WHEN a.frvcd IS NULL OR TRIM(a.frvcd) = '' THEN 0ELSE array_length(string_to_array(TRIM(a.frvcd), ','), 1)END AS a_frvcd_count,CASE WHEN b.frvcd IS NULL OR TRIM(b.frvcd) = '' THEN 0ELSE array_length(string_to_array(TRIM(b.frvcd), ','), 1)END AS b_frvcd_count,-- 判断数量是否相等(CASE WHEN a.frvcd IS NULL OR TRIM(a.frvcd) = '' THEN 0ELSE array_length(string_to_array(TRIM(a.frvcd), ','), 1)END) = (CASE WHEN b.frvcd IS NULL OR TRIM(b.frvcd) = '' THEN 0ELSE array_length(string_to_array(TRIM(b.frvcd), ','), 1)END) AS is_count_equalFROM "aaaa河南补充水库线" a LEFT JOIN model_engineering_spatial_rivl b ON a.rvcd = b.rvcd AND b.engr_id = 137ORDER BY b.rvcd ASC;