Sql server 2012 如果其中一条记录的字段为空,如何删除重复记录?

Sql server 2012 如果其中一条记录的字段为空,如何删除重复记录?,sql-server-2012,coldfusion,Sql Server 2012,Coldfusion,这是学生表: UID NAME SPECIALTY 123456 John Writing 123456 John NULL 234567 Jane Acting 234567 Jane NULL 345678 Bob Writing 345678 Bob NULL 我想运行一个查询,它将删除所有具有重复UID和空值的记录。我正在使用ColdFusion,MSQL 2012 谢谢你。你能做些像这样的事情吗: delete

这是学生表:

UID     NAME    SPECIALTY

123456  John    Writing
123456  John    NULL
234567  Jane    Acting
234567  Jane    NULL
345678  Bob     Writing
345678  Bob     NULL
我想运行一个查询,它将删除所有具有重复UID和空值的记录。我正在使用ColdFusion,MSQL 2012


谢谢你。

你能做些像这样的事情吗:

delete
  from students s1
 where specialty is null
   and exists(select 1
                from students s2
               where specialty is not null
                 and s2.uid = s1.uid);

这是Oracle中的一个相关子查询。不确定您的环境。

请在MS-SQL server中尝试以下查询

DELETE FROM
    students 
WHERE
    specialty IS NULL 
    AND UID IN (
        SELECT 
            UID 
        FROM 
            students 
        GROUP BY 
            UID 
        HAVING 
            COUNT(*) > 1
    )

问题被标记为sql server。不过,这个答案在那个系统中是有效的。谢谢,我怀疑它对sql server是有效的,但不确定。我正在使用ColdFusion builder运行这些命令。如果我这样做:从dbo.students s1中选择*专业为空且存在从dbo.students s2中选择*专业为非空且s2.uid=s1.uid我可以看到我要删除的记录。但是,如果我这样做:从dbo.students s1中删除,其中speciality为null且存在。从dbo.students s2中选择1,其中speciality为非null且s2.uid=s1.uid。我收到一个错误,在s1附近显示错误语法。很抱歉,我无法正确设置代码的格式。对于将来的参考,在发表评论时,如果您将任何内容(例如,用反勾号编码)括起来,由于灰色背景,它看起来有点像代码。如果一个学生有两个专业为空的记录,而没有一个专业的记录,则此处的危险-这两个记录都将被删除。这是对问题中所述要求的可能解释。@JimB这是用户删除所有专业记录的要求。@JimB重复的UID和空专业。@JimB如果您考虑的是2条专业为空的记录,那么即使您的答案也不会删除重复的记录,如果UID的所有记录都有空专业。如果UID的所有记录都有空SPCialty怎么办?是否全部删除,除了一个,还是一个也没有?鲍勃有两个屁股。专业