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

SQL联查中Benz表car_no重复时,如何正确使用Distinct?

解决Benz表重复car_no的联查问题

你之前直接在ON条件里用DISTINCT的写法是错误的,因为DISTINCT是用于对查询结果集去重的关键字,不能当作函数放在关联条件中。正确的做法是先对Benz表的重复car_no做去重处理,再和Cars表关联,以下是两种常用实现方式:

方式一:用子查询+DISTINCT去重

如果只需要关联Benz表的car_no字段,直接通过子查询筛选出唯一的car_no:

SELECT cr.*, bz.car_no
FROM Cars cr
JOIN (
    SELECT DISTINCT car_no
    FROM Benz
) bz ON bz.car_no = cr.car_no;

方式二:用GROUP BY分组去重(适用于需要Benz其他字段的场景)

如果需要获取Benz表中car_no对应的其他字段,可通过GROUP BY按car_no分组,配合聚合函数处理重复的字段值(比如取最大值、最小值等,根据业务需求选择):

SELECT cr.*, bz.car_no, bz.max_price
FROM Cars cr
JOIN (
    SELECT 
        car_no,
        MAX(price) AS max_price -- 示例:取每个car_no对应的最高价格
        -- 可添加其他需要的字段,并用聚合函数处理
    FROM Benz
    GROUP BY car_no
) bz ON bz.car_no = cr.car_no;

这两种方式都能保证Benz表的car_no在关联时唯一,避免因为重复值导致Cars表的记录被多次匹配。

内容的提问来源于stack exchange,提问作者Cric News For Fans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:57:22