如果对此案例有疑问,请告诉我: 我想根据特定列删除多行
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/