我有两个表,并希望通过Levenshtein模糊匹配算法从第二个表到第一个表进行左连接。 ita_public表包含jsonb数据,并且匹配发生在字符串(supplier_name)和json字符串中的一些嵌套数据之间。
ita_public
CREATE TABLE public.ita_public
(
id integer NOT NULL DEFAULT nextval('ita_data_id_seq'::regclass),
info jsonb NOT NULL,
CONSTRAINT ita_data_pkey PRIMARY KEY (id)
)
ita_sn_private
创建表public.ita_sn_private
(
id integer NOT NULL DEFAULT nextval('ita_sn_private_id_seq'::regclass),
supplier_name character varying COLLATE pg_catalog."default",
supplier_streetadd character varying COLLATE pg_catalog."default",
CONSTRAINT ita_sn_private_pkey PRIMARY KEY (id)
)
查询
SELECT
priv.*,
pub.info::json->>'name' as match_org_name,
pub.info::json->'locations'->'items'-> 0 ->'address'->>'streetName'
FROM ita_sn_private as priv
LEFT JOIN ita_public as pub
ON ((levenshtein(priv.supplier_name, pub.info::json->>'name') < 3))
但是我遇到了错误:
错误:levenshtein参数超过了255个字符的最大长度 SQL状态:22023
有人可以帮忙吗?我在互联网上找不到任何有关此的信息。我创建了测试表和测试数据,并且查询工作正常,但是在我的原始数据集上却没有。
答案 0 :(得分:0)
levenshtein(文本源,文本目标)返回int
源和目标都可以是任何非空字符串,最多255个字符。
您可以尝试:
ON ((levenshtein(left(priv.supplier_name, 255), left(pub.info::json->>'name', 255)) < 3))