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

如何用SQL查询同一列值相同但另一列值不同的记录?

查询同一列值相同但另一列值不同的记录

你之前写的select Name,Type from table where Name != Name不会返回任何结果,因为一个字段不可能不等于自身,这个条件永远不成立。下面是几种能实现需求的正确SQL写法:

方法一:分组筛选+关联原表

先通过分组找出对应多种不同Type的Name,再关联原表获取完整记录:

SELECT t.Name, t.Type
FROM your_table t
INNER JOIN (
    SELECT Name
    FROM your_table
    GROUP BY Name
    HAVING COUNT(DISTINCT Type) > 1
) sub ON t.Name = sub.Name;

说明:子查询里的COUNT(DISTINCT Type)用于统计每个Name对应的不同Type数量,筛选出数量大于1的Name后,再和原表关联拿到所有相关记录。记得把your_table替换成你的实际表名。

方法二:窗口函数(适合支持窗口函数的数据库)

如果你的数据库支持窗口函数(比如MySQL 8+、PostgreSQL、SQL Server等),可以用这种更简洁的写法:

SELECT Name, Type
FROM (
    SELECT 
        Name, 
        Type,
        COUNT(DISTINCT Type) OVER (PARTITION BY Name) AS type_count
    FROM your_table
) t
WHERE type_count > 1;

说明:窗口函数PARTITION BY Name按Name分组,统计每个组内不同Type的数量,外层直接筛选数量大于1的记录即可。

方法三:自连接查询

通过表自连接的方式,找到同一个Name但Type不同的记录:

SELECT DISTINCT t1.Name, t1.Type
FROM your_table t1
JOIN your_table t2 
    ON t1.Name = t2.Name 
    AND t1.Type != t2.Type;

说明:自连接后会产生重复记录,所以用DISTINCT去重,确保结果里的记录唯一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:03:25