我使用levenshtein距离和比率源代码创建了mysql用户函数。我正在比较2条记录,基于75%的匹配,我想选择记录。
paypal_ipn_orders
,标题为ITEM
itemkey
执行查询,以便在名为ITEM
的记录中找到75%匹配itemkey
中的八位数字分配到表格paypal_ipn_orders
这是查询
UPDATE paypal_ipn_orders
SET sort_num = (SELECT sort_id
FROM itemkey
WHERE levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) > 75)
WHERE packing_slip_printed = 0
AND LOWER(payment_status) = 'completed'
AND address_name <> ''
AND shipping < 100
我已经调整了几次,但是在levenshtein_ratio部分第4和第5行之间失败了。如果它工作,它表示子查询返回多行。我不知道如何修复它以使其返回正确的结果,我只是失去了如何使这项工作。
答案 0 :(得分:2)
SET上的子查询应该只返回一个值。如果itemkey有多个项目是item_name的75%,你想做什么?以下将使用最佳匹配之一:
UPDATE paypal_ipn_orders
SET sort_num = (SELECT sort_id
FROM itemkey
WHERE levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) > 75
ORDER BY levenshtein_ratio(itemkey.item, paypal_ipn_orders.item_name) DESC
LIMIT 1)
WHERE packing_slip_printed = 0
AND LOWER(payment_status) = 'completed'
AND address_name <> ''
AND shipping < 100