【MSSQL】SqlServer中delete语句表别名的问题

 

正文

1、一般情况下删除表数据的sql语句:

delete from products
where rowid>2

2、如果想给表起个别名再删除呢,就得像下面这样写了

delete products from products as p
where p.rowid>2

也可这样

delete p from products as p
where p.rowid>6

3、想一下,什么情况下删除一个表数据的时候要用别名呢?

  之所以要用别名,是因为delete的where条件中需要用到子查询写一些条件,举例:
  利用自连接删除表中重复的数据:

复制代码
CREATE TABLE [dbo].[products1]
(
    [rowid] [int] primary key IDENTITY(1,1) NOT NULL,
    [name] [nchar](10) NULL,
    [price] [int] NULL
)

INSERT INTO Products VALUES('苹果',    50);
INSERT INTO Products VALUES('橘子',    100);
INSERT INTO Products VALUES('橘子',    100);
INSERT INTO Products VALUES('橘子',    100);
INSERT INTO Products VALUES('香蕉',    80);
INSERT INTO Products VALUES('香蕉',    80);
复制代码
复制代码
delete products from products as p1
where p1.rowid<
(
    select MAX(p2.rowid) from products p2 
    where p1.name=p2.name and p1.price=p2.price
)
--结果:
--    rowid        name    price
--      1            苹果        50
--      4            橘子        100
--      6            香蕉        80 
复制代码

4、其他数据库的情况

  ORACLE 可以直接起别名    

delete from products p
where p.rowid>2

 

  SQLSERVER/MYSQL 可以这样起别名   

delete products from products as p 
where p.rowid>2
delete p from products as p
where p.rowid>6

 

posted @   willingtolove  阅读(3972)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示