sql - 如何删除具有多个值的行并仅选择 1 行

标签 sql sql-server database

如果对此案例有疑问,请告诉我: 我想根据特定列删除多行

id    | date       |   user    | item  |      material      | Text | Description |
------+------------+-----------+-------+--------------------+------+-------------+
12345 | 31.03.2015 | Starbucks | 00010 | 000000001011000106 | abcd |  something  | 
null  | 31.03.2015 | Starbucks | 00010 | 000000001011000106 | abcd |  something  | 
54321 | 31.03.2015 |   Burger  | 00010 | 000000001011000106 | abcd |  something  |
11111 | 31.03.2015 |   Burger  | 00010 | 000000001011000106 | abcd |  something  |

假设我要删除包含超过 1 个用户“Starbucks”的多行,我想删除 id 为 null 的行。 但如果没有包含 null 的 id,比如“Burger”,我只想删除一个,然后选择 1,无论它是什么。 所以,它应该是这样的:

id    | date       |   user    | item  |      material      | Text | Description |
------+------------+-----------+-------+--------------------+------+-------------+
12345 | 31.03.2015 | Starbucks | 00010 | 000000001011000106 | abcd |  something  | 
54321 | 31.03.2015 |   Burger  | 00010 | 000000001011000106 | abcd |  something  |

可以吗?

最佳答案

是的,你可以。

您需要对要保留的结果进行分组,然后使用带有联接的表来连接到主表。这是一种仅保留具有最大 id 且没有 null id 的记录的方法

Delete from [Table]
From [Table]
left join (
    Select MAX(ID) as ID
    from [Table]
    Where ID is not Null
    group by [USER],item,[date],material,[TEXT],Description
    -- Results to Keep
) as P on [Table].ID=P.ID
where P.ID is null

关于sql - 如何删除具有多个值的行并仅选择 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363451/

相关文章:

database - 如何区分多值属性和实体?

sql - 根据最大日期和分组依据更新列

php - mysql_num_rows() : supplied argument is not a valid MySQL result resource

mysql - 在 SQL Server 中使用 LIKE 和通配符获取月份或日期会出错

sql - 计算 CASE WHEN 的输出

php - Codeigniter 连接 4 个表

sql - 如何获取未在目标日期运行的天数

sql-server - 为什么 'œ' 匹配 NVarchar 中的 'oe' 但不匹配 Varchar

sql-server - 具有外键的快照表与具有实际值的快照表

database - Sybase中的游标有多慢