如何在MySQL中删除以2列作为复合主键的多行?

如何在MySQL中删除以2列作为复合主键的多行?,mysql,sql-delete,composite-primary-key,multiple-records,Mysql,Sql Delete,Composite Primary Key,Multiple Records,我的innodb表具有以下结构:4列(CountryID,年份,%Change,Source),其中2列(CountryID,年份)作为主键。除了使用for循环删除每一行之外,如何删除多行 我在找类似的东西 DELETE FROM CPI WHERE CountryID AND Year IN (('AD', 2010), ('AF', 2009), ('AG', 1992)) Oracle的答案是: delete from cpi where (countryid, year) in

我的innodb表具有以下结构:4列
(CountryID,年份,%Change,Source)
,其中2列
(CountryID,年份)
作为主键。除了使用for循环删除每一行之外,如何删除多行

我在找类似的东西

DELETE FROM CPI 
 WHERE CountryID AND Year IN (('AD', 2010), ('AF', 2009), ('AG', 1992))

Oracle的答案是:

delete from cpi
 where (countryid, year) in (('AD', 2010), ('AF', 2009), ('AG', 1992))

这是相当标准的SQL语法,我认为MySQL也是如此。

您能发布错误消息吗?什么不起作用?我觉得应该行得通。你们有独立的桌子吗?嗨,卡尔。隐马尔可夫模型。。在看到你的评论后,我刚刚澄清了我的问题。希望编辑能更好地解释它。呜呜,找到了。编辑问题以反映答案。谢谢大家!是的,确实帮了我,非常感谢!顺便说一句,如果有人收到此错误#1241-我认为操作数应该包含2列,这是由于将括号放在错误的位置造成的:
从CPI中删除((CountryID,Year)in('AD',2010),('AF',2009),('AG',1992))
谢谢!在MySQL中也试过了,效果很好!谢谢,用mysql试过了……这就是我要找的。对我有效。在通过子查询返回参数过滤器的情况下,经过尝试和测试也有效。非常有用…+1对于这一点,这种方法的性能如何?在您的示例中,所有涉及的列都是复合主键的一部分。我想知道如果所涉及的列不表示复合主键,该查询将如何执行。假设我有一个由4列组成的主键,但我只指定了这类主键的2列。这个查询可以持续多长时间?如果要删除数百条记录,此查询将非常长。。。有什么问题吗?数百条记录都可以@iForm。这将对数十亿人起作用。如果您指定PK的前两列,那么这也不会有多大区别。