You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本在单表不同列检索相同值并匹配对应order_id

电话号码两类检索需求实现方案

现有业务表包含tel1、tel2、tel3三个电话号码存储字段,以及order_id订单编号字段,以下分别给出两类需求的实现方式,覆盖SQL查询、Python脚本两种常用场景。


需求1:识别不同tel列中存储的重复相同电话号码

核心逻辑是将三列独立存储的电话号码打平为单列,统计每个号码的出现次数,筛选出出现2次及以上的重复值,同时关联对应的订单信息。

SQL实现(以MySQL为例)

WITH all_tel_record AS (
    SELECT tel1 AS tel_number, order_id FROM 你的表名 WHERE tel1 IS NOT NULL
    UNION ALL
    SELECT tel2 AS tel_number, order_id FROM 你的表名 WHERE tel2 IS NOT NULL
    UNION ALL
    SELECT tel3 AS tel_number, order_id FROM 你的表名 WHERE tel3 IS NOT NULL
)
SELECT
    tel_number AS 重复电话号码,
    COUNT(DISTINCT order_id) AS 关联订单总数,
    GROUP_CONCAT(DISTINCT order_id SEPARATOR ',') AS 匹配的所有order_id
FROM all_tel_record
GROUP BY tel_number
HAVING COUNT(*) >= 2;

跨tel列重复号码识别场景示例

Python pandas脚本实现

import pandas as pd

# 替换为你自己的数据读取逻辑,支持读csv、excel、数据库查询结果等
df = pd.read_excel("你的数据表路径.xlsx")

# 行转列打平三列tel数据
tel_unpivot = df.melt(
    id_vars=['order_id'],
    value_vars=['tel1', 'tel2', 'tel3'],
    var_name='存储字段',
    value_name='电话号码'
).dropna(subset=['电话号码'])

# 筛选重复号码及关联订单
repeat_result = tel_unpivot.groupby('电话号码').agg(
    关联订单数=('order_id', 'nunique'),
    关联订单列表=('order_id', lambda x: sorted(x.unique().tolist()))
).query("关联订单数 >= 2").reset_index()

需求2:指定目标电话号码,查询该号码匹配的所有order_id

核心逻辑是匹配三个tel列,只要目标号码在任意一列出现,就提取对应的order_id去重返回。以查询号码65432100为例,最终返回匹配的order_id为1、3、5。

SQL实现(以MySQL为例)

-- 将WHERE条件中的号码替换为你需要检索的目标值即可
SELECT DISTINCT order_id
FROM 你的表名
WHERE
    tel1 = '65432100'
    OR tel2 = '65432100'
    OR tel3 = '65432100';

指定号码查询关联订单场景示例

Python pandas脚本实现

# 替换为需要检索的目标电话号码
target_tel = '65432100'

# 筛选匹配的订单
match_order_ids = df[
    (df['tel1'] == target_tel) |
    (df['tel2'] == target_tel) |
    (df['tel3'] == target_tel)
]['order_id'].sort_values().unique().tolist()

内容的提问来源于stack exchange,提问作者RAYMOND Yeung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:09:23