Sql 如何删除以2列作为复合主键的多行
例如,我们有一个在Oracle中工作的查询,但是它在SQL Server中不工作。我们如何为SQL server重写它Sql 如何删除以2列作为复合主键的多行,sql,sql-server,sql-delete,Sql,Sql Server,Sql Delete,例如,我们有一个在Oracle中工作的查询,但是它在SQL Server中不工作。我们如何为SQL server重写它 delete from cpi where (countryid, year) in (('AD', 2010), ('AF', 2009), ('AG', 1992)) 相比之下,它要笨重得多,但是您可以使用来在EXISTS子句中创建元组列表,并以这种方式进行匹配,例如 DELETE FROM cpi WHERE EXISTS ( SELECT 1
delete from cpi
where (countryid, year) in (('AD', 2010), ('AF', 2009), ('AG', 1992))
相比之下,它要笨重得多,但是您可以使用来在
EXISTS
子句中创建元组列表,并以这种方式进行匹配,例如
DELETE FROM cpi
WHERE EXISTS
( SELECT 1
FROM (VALUES ('AD', 2010), ('AF', 2009), ('AG', 1992)) AS v (countryid, year)
WHERE v.countryid = cpi.countryid
AND v.year = cpi.year
);
如果真的只有几对,只需:
delete from cpi
where (countryid = 'AD' and year = 2010) or (countryid = 'AF' and year = 2009) or (countryid = 'AG' and year = 1992)
或者,如果有更多,可能类似于:
delete from cpi
where countryid + '|' + convert(varchar(4),year) in ('AD|2010','AF|2009','AG|1992')
您可以使用表值构造函数来表示它。在
删除中
:
delete from cpi
from (values ('AD', 2010), ('AF', 2009), ('AG', 1992) ) v(countryid, year)
where cpi.countryid = v.countryid and cpi.year = cpi.year;
不需要子查询