解説
AIに二つの表を結合させる前に:キーの重複と行数の増え方を確かめよう
注文の表へ連絡先を付けたら、金額の合計まで増えてしまった。表の結合では、同じキーが複数行にあると、一つの注文が複数回現れることがあるよ。

注文の表へ連絡先を付けたら、金額の合計まで増えてしまった。表の結合では、同じキーが複数行にあると、一つの注文が複数回現れることがあるよ。
ここでは架空の注文と連絡先を使い、結合前の確認を整理する。キーは、対応する記録を探すための値。実在する顧客情報をAIへ渡す必要はないよ。
一件と一件で対応するとは限らない
注文表には、顧客Aの注文101・100円、顧客Bの注文102・200円がある。連絡先表には、顧客Aのアドレスが二つあり、Bはないとする。
| 注文 | 顧客 | 金額 |
|---|---|---|
| 101 | A | 100 |
| 102 | B | 200 |
Aの二つの連絡先を両方残し、対応のない注文も残す結合なら、注文101が二行、102が一行になる。三行の金額をそのまま足すと400円。でも元の注文は合計300円なんだ。
何を一行にするかを先に決める
「注文ごとに一行」が必要なら、連絡先を一つへ決めるルールや、複数の連絡先を一つの欄へまとめる方法を検討する。一方、「注文と連絡先の組み合わせ」なら、複数行になること自体は目的に合う。
AIへの依頼でも、結合するキー、残す行、重複の扱い、対応のない記録の扱いを明記しよう。重複を勝手に消しても、金額だけ検算しても十分ではないよ。
小さなPython例で行数を見る
from collections import defaultdict
contacts = defaultdict(list)
contacts['A'] = ['a@example.com', 'b@example.com']
orders = [('101', 'A', 100), ('102', 'B', 200)]
joined = []
for order_id, customer, amount in orders:
for email in contacts[customer] or [None]:
joined.append((order_id, amount, email))
print(len(joined), sum(row[1] for row in joined))
表示は3と400。Bの連絡先がない状態はNoneで残し、元の注文の金額は変更していない。これは行が増える条件を確かめる例で、請求額を計算する完成プログラムではないよ。
前後のチェック項目
- キーが空の行と、同じキーの複数行を数える。
- 一対一・一対多など、期待する対応を決める。
- 結合前後の件数と、元記録の識別子を照合する。
- 金額の集計は、目的の単位で一度ずつ数える。
- 不一致を別の表へ残し、推測で補わない。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。