如何查询BEAME表中未在FLEET表的VIN并统计重复项
解决方案
要同时实现筛选BEAME表中存在但FLEET表中不存在的VIN,以及保留分组统计重复项的逻辑,可以使用LEFT JOIN结合空值过滤的方式,具体SQL如下:
SELECT b1.vin, COUNT(*) AS duplicate_count, -- 若同一VIN对应多个reg,可使用聚合函数指定取值,比如MAX(b1.reg) MAX(b1.reg) AS beame_reg FROM beame AS b1 LEFT JOIN fleet AS f1 ON b1.vin = f1.vin WHERE f1.vin IS NULL GROUP BY b1.vin
逻辑说明:
LEFT JOIN会保留beame表的所有记录,当fleet表中没有匹配的VIN时,f1.vin会返回NULL;- 通过
WHERE f1.vin IS NULL过滤出仅存在于beame表的VIN; GROUP BY b1.vin对每个唯一VIN分组,COUNT(*)统计该VIN在beame表中的重复次数;- 关于
b1.reg:如果同一个VIN对应多条不同的reg记录,直接GROUP BY b1.vin时部分数据库(如MySQL仅在宽松模式下)会返回任意一条的reg,建议使用聚合函数(如MAX/MIN)明确指定取值规则。
另外补充:你原查询中的WHERE f1.vin IS NOT NULL是冗余的,因为INNER JOIN本身已经只返回两表匹配的记录,无需额外过滤。
内容的提问来源于stack exchange,提问作者Jaco Shutte
相关产品推荐
相关产品推荐

