删除记录的SQL帮助
我有一个查询返回多条记录,这些记录成对出现。记录对列中的某些信息是相同的,例如ID和year,但其他信息的值不同,例如type列可能为null,而另一列可能为A删除记录的SQL帮助,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个查询返回多条记录,这些记录成对出现。记录对列中的某些信息是相同的,例如ID和year,但其他信息的值不同,例如type列可能为null,而另一列可能为A 如果第三列类型等于其中一对的“A”或另一个任意字符串,如何让它在SQL查询的WHERE部分排除具有相同id和年份的两个记录?我想可以使用case语句,但我不确定。您可以使用notexists和子查询 SELECT id, year FROM table t WHERE NOT EXISTS (SELECT * FROM table t2
如果第三列类型等于其中一对的“A”或另一个任意字符串,如何让它在SQL查询的WHERE部分排除具有相同id和年份的两个记录?我想可以使用case语句,但我不确定。您可以使用notexists和子查询
SELECT id, year
FROM table t
WHERE NOT EXISTS (SELECT * FROM table t2
WHERE ThirdColumn = 'A'
AND t2.id = t.id
AND t2.year = t.year)
您可以使用“不存在”和子查询
SELECT id, year
FROM table t
WHERE NOT EXISTS (SELECT * FROM table t2
WHERE ThirdColumn = 'A'
AND t2.id = t.id
AND t2.year = t.year)
不那么直截了当
select t.*
from tbl t
left join (
select t2.id, t2.year
from tbl t2
group by t2.id, t2.year
having count(*) > 1 and
count(case when type='A' then 1 end) *
count(case when type='A' then null else 1 end) > 0
) X
on X.id = t.id and X.year = t.year
WHERE X.id is null
- 2
s确定“至少一个count(case..)>0
s为“A”,而至少一个不是”类型
是一种经典技术,用于仅显示LEFT JOIN失败的数据,即取出满足子查询条件的id/年对LEFT JOIN+WHERE IS NULL
- 2
s确定“至少一个count(case..)>0
s为“A”,而至少一个不是”类型
是一种经典技术,用于仅显示LEFT JOIN失败的数据,即取出满足子查询条件的id/年对LEFT JOIN+WHERE IS NULL
- 不那么简单
select t.*
from tbl t
left join (
select t2.id, t2.year
from tbl t2
group by t2.id, t2.year
having count(*) > 1 and
count(case when type='A' then 1 end) *
count(case when type='A' then null else 1 end) > 0
) X
on X.id = t.id and X.year = t.year
WHERE X.id is null