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

如何合并无共同列且行数相同的SQL表,为每行匹配唯一对应车牌

两张同行数无关联字段表一对一匹配解决方案

你执行的语句属于无关联条件的交叉连接,天然会返回两张表行数相乘的笛卡尔积结果,不符合一对一匹配的需求。解决思路为给两张表分别生成唯一连续行号,按行号关联即可实现行对行的匹配。

主流数据库通用方案(支持窗口函数版本:MySQL8+、SQL Server、PostgreSQL、Oracle等)

使用ROW_NUMBER()窗口函数生成行号后关联:

WITH CarWithRN AS (
    SELECT 
        Brand,
        Miles,
        -- 如需指定车辆排序规则,可将ORDER BY后的(SELECT NULL)替换为对应字段,例如ORDER BY Miles ASC
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM Car
), PlateWithRN AS (
    SELECT 
        NumberPlate,
        -- 如需指定车牌排序规则,可调整ORDER BY后的内容
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
    FROM NewNumberPlate
)
SELECT c.Brand, c.Miles, p.NumberPlate 
INTO #newCars
FROM CarWithRN c
INNER JOIN PlateWithRN p ON c.rn = p.rn;

低版本MySQL兼容方案(不支持窗口函数的MySQL5.x版本)

使用用户变量生成行号后关联:

SELECT c.Brand, c.Miles, p.NumberPlate
INTO #newCars
FROM (
    SELECT 
        Brand,
        Miles,
        @row1 := @row1 + 1 AS rn
    FROM Car, (SELECT @row1 := 0) t
) c
INNER JOIN (
    SELECT 
        NumberPlate,
        @row2 := @row2 + 1 AS rn
    FROM NewNumberPlate, (SELECT @row2 := 0) t2
) p ON c.rn = p.rn;

补充说明

如果需要自定义匹配顺序,比如按车辆里程从小到大分配车牌、按车牌号码从小到大匹配车辆,只需调整ROW_NUMBER()中ORDER BY后的字段即可,灵活度很高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:09:02