SQL筛选出具有多个列条目的行

SQL筛选出具有多个列条目的行,sql,Sql,我试图筛选出一个表中的行,这些行对于一个列值有多个条目。在下面的示例中,我想完全过滤掉名为Tom的行,只保留一个人只有一种颜色的行。我正在使用的实际表的名称有很长的数字,因此在查询中使用名称不是一个选项 姓名颜色年龄 ------------ 詹姆斯·格林54 汤姆蓝45 汤姆红45 哈里蓝84 鲍勃红26 结果: 姓名颜色年龄 ----------- 詹姆斯·格林54 哈里蓝84 鲍勃红26 虽然您没有提到数据库名称,但下面的逻辑应该适用于大多数数据库- 您可以检查为SQL Server创建的

我试图筛选出一个表中的行,这些行对于一个列值有多个条目。在下面的示例中,我想完全过滤掉名为Tom的行,只保留一个人只有一种颜色的行。我正在使用的实际表的名称有很长的数字,因此在查询中使用名称不是一个选项

姓名颜色年龄 ------------ 詹姆斯·格林54 汤姆蓝45 汤姆红45 哈里蓝84 鲍勃红26 结果:

姓名颜色年龄 ----------- 詹姆斯·格林54 哈里蓝84 鲍勃红26
虽然您没有提到数据库名称,但下面的逻辑应该适用于大多数数据库-

您可以检查为SQL Server创建的

SELECT B.* 
FROM
(
    SELECT NAME 
    FROM your_table
    GROUP BY Name
    HAVING COUNT(*) = 1
)A
INNER JOIN your_table B ON A.Name = B.Name

虽然您没有提到数据库名称,但下面的逻辑应该适用于大多数数据库-

您可以检查为SQL Server创建的

SELECT B.* 
FROM
(
    SELECT NAME 
    FROM your_table
    GROUP BY Name
    HAVING COUNT(*) = 1
)A
INNER JOIN your_table B ON A.Name = B.Name

您可以使用窗口功能进行以下操作:

select name, colour, age
from (
  select name, colour, age, 
         count(*) over (partition by name) as name_count
  from your_table
) t
where name_count = 1;

您可以使用窗口功能进行以下操作:

select name, colour, age
from (
  select name, colour, age, 
         count(*) over (partition by name) as name_count
  from your_table
) t
where name_count = 1;
只保留一个人只有一种颜色的行

您可以使用“不存在”:

通过名称、颜色索引,这通常是最好的执行计划,即最快的

与您的问题一致,这将返回颜色相同的名称的所有行

只保留一个人只有一种颜色的行

您可以使用“不存在”:

通过名称、颜色索引,这通常是最好的执行计划,即最快的


与您的问题一致,这将返回颜色相同的名称的所有行。

您的数据库是什么?Sql server、MySQL…?是否要跳过Tom,因为他有重复的行?或者因为他的名字是Tom?数据库是SQL server,使用MS SQL server 2014,我想跳过所有Tom的,因为他有多个条目。你的数据库是什么?Sql server、MySQL…?是否要跳过Tom,因为他有重复的行?或者因为他的名字是Tom?数据库是SQL server,使用MS SQL server 2014,我想跳过所有Tom的,因为他有多个条目。过滤掉名为Tom的行?有点不清楚。。。这是因为Tom的名字,还是因为他有重复的行…从表中筛选出一个列值有多个条目的行OP@user3513098很高兴听到这个消息。请接受答案,如果真的有帮助,请投赞成票:过滤掉名为Tom的行?有点不清楚。。。这是因为Tom的名字,还是因为他有重复的行…从表中筛选出一个列值有多个条目的行OP@user3513098很高兴听到这个消息。请接受答案,如果真的有帮助,请投赞成票: