智能体把两份数据关联后,总行数突然增加,先检查关联键是否重复。给AI的要求应包括一对一还是多对一,不能只说“按ID合并”。
让AI编写多表关联代码的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

检查多表关联的键与行数前,先定规则
示例订单指向客户ID,客户表应当一个ID一行。右表重复会让普通关联把同一订单展开多次。
本地检查先拒绝右表重复,再构造索引;不能用字典直接覆盖重复客户,因为覆盖只是隐藏错误。
未匹配客户保留为missing清单,而不是删掉订单或填成默认客户。对账关注输入订单数与输出订单数相等。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
写many-to-one关联:orders.customer关联customers.id,右键必须唯一,重复立即失败。未匹配保留customer_name=None和missing IDs;不得删除订单。检查输出行数=输入行数。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
from collections import Counter
def join(orders,customers):
if any(n>1 for n in Counter(r['id'] for r in customers).values()): raise ValueError('右表键重复')
lookup={r['id']:r['name'] for r in customers}
result=[dict(r,customer_name=lookup.get(r['customer'])) for r in orders]
missing=[r['id'] for r in result if r['customer_name'] is None]
assert len(result)==len(orders)
return result,missing
orders=[{'id':'o1','customer':'c1'},{'id':'o2','customer':'c9'}]
customers=[{'id':'c1','name':'Example'}]
out,missing=join(orders,customers)
assert missing==['o2'] and len(out)==2
print('rows',len(out),'unmatched',missing)
try: join(orders,customers+customers)
except ValueError as e: print('blocked',e)
else: raise AssertionError('重复键必须拒绝')
怎样判断结果符合要求
输出仍为2行,未匹配订单为o2;右表重复时失败。若AI先drop_duplicates,就必须追问为何可以丢掉另一个客户版本。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
rows 2 unmatched ['o2']
blocked 右表键重复
不同来源ID类型可能不同,字符串001与整数1不能默认视作同一键。
客户名为空与客户不存在在本例都返回None,生产需用是否命中索引另外区分。
哪些失败必须停下来处理
多对多关联可能合法,但必须预先定义展开口径与数量验收,不能套用many-to-one检查。
同名客户不是相同客户,关联键必须来自正式数据契约。
接入自己的任务前再核对一次
将重复键、未匹配与字段冲突分别输出清单,交给AI解释时保留原ID定位。
改用Pandas或SQL时仍保留这组小样本作为独立真值。
资料与适用范围
Counter统计键重复;关联关系及未匹配语义由业务契约定义。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 让 ChatGPT 写 Pandas 清洗代码怎么验收?用断言核对缺失值、类型与重复行。本文的重点是检查多表关联的键与行数,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33394.html