在两列对的列表中删除 WHERE 的更优雅的语法



我有 100 行需要删除,基于PersonIdCarModel.有些PersonId可能有多个CarModel,所以如果我使用

DELETE FROM myTable
WHERE PersonId IN (
101,
102,
103,
104
)
AND CarModel IN (
'Honda Accord',
'Ford Explorer',
'Other car model',
'Last car model'
)

然后会有删除 101 的误报,我不想要的"福特探索者"。 只有101,"本田雅阁"和102,"福特探索者"

我可以将其格式化为

DELETE FROM myTable
WHERE 
(PersonId = 101 AND CarModel = 'Honda) Accord' 
OR (PersonId = 102 AND CarModel = 'Ford Explorer')
OR (PersonId = 103 AND CarModel = 'model 1')
OR ( PersonId = 104 AND CarModel = 'model 2')

但这有点丑陋。有更干净的语法吗?我找不到大列表的多列 where 子句

某些版本的 SQL(MySQL、Oracle(支持IN表达式中的多个列:

DELETE FROM myTable
WHERE (PersonId, CarModel) IN ((101, 'Honda Accord'), (102, 'Ford Explorer'), (103, 'model 1'), ...)

最新更新