Как удалить несколько строк с двумя столбцами в качестве составного первичного ключа в MySQL?

Моя таблица innodb имеет следующую структуру: 4 столбца (CountryID, Year, %Change, Source) с 2 столбцами (CountryID, Year) в качестве первичного ключа. Как удалить несколько строк, кроме использования цикла for для удаления каждой строки?

Я ищу что-то похожее на

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

person Ana Ban    schedule 04.12.2011    source источник
comment
Можете ли вы опубликовать сообщение об ошибке? Что не работает? Похоже, это должно сработать для меня. У вас есть зависимые таблицы?   -  person Carl F.    schedule 04.12.2011
comment
привет карл. хм .. я только что уточнил свой вопрос, увидев ваш комментарий. надеюсь, редактирование лучше объясняет это.   -  person Ana Ban    schedule 04.12.2011
comment
упс, нашел. отредактировал вопрос, чтобы отразить ответ. всем спасибо!   -  person Ana Ban    schedule 04.12.2011
comment
Да, мне определенно помогло, большое спасибо! Кстати, если кто-то получает эту ошибку #1241 - Операнд должен содержать 2 столбца для меня это было вызвано размещением квадратных скобок в неправильном месте следующим образом: DELETE FROM CPI WHERE ((CountryID, Year) IN ('AD', 2010), ('AF', 2009), ('AG', 1992))   -  person Timo Huovinen    schedule 13.06.2013


Ответы (1)


Ответ в Oracle:

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

Это довольно стандартный синтаксис SQL, и я думаю, что MySQL такой же.

person Ben    schedule 04.12.2011
comment
Спасибо! попробовал и в MySQL, и он работает как шарм! - person jroi_web; 10.08.2015
comment
Спасибо, попробовал с mysql... это то, что я искал. Работает на меня. - person Swadeshi; 25.05.2017
comment
проверено и проверено, также работает, когда фильтры параметров возвращаются подзапросом.. очень полезно... +1 для этого - person marked.; 09.05.2019
comment
Какова производительность этого подхода? В вашем примере все задействованные столбцы являются частью составного первичного ключа. Мне интересно, как этот запрос будет выполняться, если задействованные столбцы не представляют составной первичный ключ. Скажем, у меня есть первичный ключ, состоящий из 4 столбцов, но я указываю только 2 столбца такого ПК. Как долго может быть этот запрос? Если у вас есть сотни записей, которые нужно удалить, этот запрос будет очень длинным... какие-либо проблемы с этим? - person Ihor M.; 29.03.2020
comment
Сотни записей — это нормально, @IhorM. Это сработает на миллиардах. Если вы укажете первые два столбца ПК, это также не будет иметь большого значения. - person Ben; 24.04.2020