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

如何编写SQL语句找出Animal与Name列不满足1对1关系的行?

找出Animal与Name不满足1对1关系的行

要筛选出不符合1对1映射的记录,核心是识别出同一Animal对应多个不同Name,或同一Name对应多个不同Animal的分组,再提取这些分组内的所有行。

方案一:用EXISTS子查询直接筛选

SELECT t.Animal, t.Name
FROM your_table t
WHERE 
    -- 匹配对应多个不同Name的Animal
    EXISTS (
        SELECT 1 
        FROM your_table 
        WHERE Animal = t.Animal 
        GROUP BY Animal 
        HAVING COUNT(DISTINCT Name) > 1
    )
    OR 
    -- 匹配对应多个不同Animal的Name
    EXISTS (
        SELECT 1 
        FROM your_table 
        WHERE Name = t.Name 
        GROUP BY Name 
        HAVING COUNT(DISTINCT Animal) > 1
    );

方案二:先预查异常项再关联

通过CTE先找出所有有问题的Animal和Name,再关联原表获取完整记录:

WITH problematic_animals AS (
    SELECT Animal 
    FROM your_table 
    GROUP BY Animal 
    HAVING COUNT(DISTINCT Name) > 1
),
problematic_names AS (
    SELECT Name 
    FROM your_table 
    GROUP BY Name 
    HAVING COUNT(DISTINCT Animal) > 1
)
SELECT t.Animal, t.Name
FROM your_table t
JOIN problematic_animals pa ON t.Animal = pa.Animal
UNION
SELECT t.Animal, t.Name
FROM your_table t
JOIN problematic_names pn ON t.Name = pn.Name;

示例数据测试结果

针对你提供的示例数据,执行上述SQL会返回以下行:

AnimalName
DogPatch
DogRover

注:Mouse重复关联Gerry属于1对1的正常重复,Cat仅关联唯一Name,因此不会被筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:45:17