Mar*_*son 7 t-sql sql-server sql-server-2008
让我举例解释一下.请考虑下表:
Customer Id | Food
------------+---------
1 | Pizza
1 | Burger
1 | Hot Dog
2 | Milkshake
2 | Burger
3 | Pizza
Run Code Online (Sandbox Code Playgroud)
我想删除那些从未订购过Pizza的客户的所有记录.所以,我应该留下这个(客户#2删除):
Customer Id | Food
------------+---------
1 | Pizza
1 | Burger
1 | Hot Dog
3 | Pizza
Run Code Online (Sandbox Code Playgroud)
我知道我可以做,NOT IN
但表现很糟糕.
编写此查询以在SQL Server中针对100,000多条记录实现此目的的最高效方法是什么?
使用适当的索引,简单NOT EXISTS
应该是有效的.
DELETE c1 FROM Customers c1
WHERE NOT EXISTS
(
SELECT 1 FROM Customers c2
WHERE c1.[Customer Id] = c2.[Customer Id]
AND c2.[Food] = 'Pizza'
);
Run Code Online (Sandbox Code Playgroud)
在上创建索引[Customer Id]
和非聚集索引Food
.
归档时间: |
|
查看次数: |
95 次 |
最近记录: |