【问题标题】:More elegant syntax for DELETE WHERE on list of two columns pair [duplicate]两列对列表上的 DELETE WHERE 的更优雅语法 [重复]
【发布时间】:2019-12-31 23:56:57
【问题描述】:

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

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2019-12-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多