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怎么办?是否全部删除,除了一个,还是一个也没有?鲍勃有两个屁股。专业