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.