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

如何编写SQL排除拥有Honda车辆的所有人员?

筛选完全不拥有特定车辆的人员(SQL查询方案)

需求说明

需要编写SQL查询,排除所有拥有Honda车辆的人员——只要某人员名下有一辆Honda,就将该人员的所有记录全部排除,而非仅过滤Honda车型。常规的WHERE Vehicle NOT IN ('Honda')无法满足需求,因为它只会去掉Honda的行,仍会保留该人员的其他车辆记录。

样例表数据

PersonVehicle
Person1Buick
Person1Honda
Person2Toyota
Person3Tesla
Person4Ford
Person4Honda
Person5Airplane
Person5Kia

目标结果:仅显示Person2、Person3、Person5的所有记录。

可行SQL方案

方案1:NOT EXISTS(最直观)

直接检查当前人员是否存在Honda车辆,不存在则保留其所有记录:

SELECT p.*
FROM your_table p
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table p_honda
    WHERE p_honda.Person = p.Person
      AND p_honda.Vehicle = 'Honda'
);

方案2:CTE实现(符合你的尝试方向)

先通过CTE提取所有拥有Honda的人员名单,再筛选不在该名单中的人员:

WITH honda_owners AS (
    SELECT DISTINCT Person
    FROM your_table
    WHERE Vehicle = 'Honda'
)
SELECT *
FROM your_table
WHERE Person NOT IN (SELECT Person FROM honda_owners);

方案3:GROUP BY + HAVING(聚合判断)

通过分组统计,筛选出名下没有Honda的人员:

SELECT Person, Vehicle
FROM your_table
WHERE Person IN (
    SELECT Person
    FROM your_table
    GROUP BY Person
    HAVING SUM(CASE WHEN Vehicle = 'Honda' THEN 1 ELSE 0 END) = 0
);

你的原代码问题说明

你之前的CTE写法存在两处关键错误:

  1. CTE中表名错误:select distinct person from person应该指向你的车辆表(比如your_table),而非person
  2. 子查询关联逻辑错误:Table2.vehicle = person.vehicle没有关联人员维度,且逻辑搞反,应该检查该人员是否存在Honda记录

内容的提问来源于stack exchange,提问作者Sherry P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:19