二条好用的SQL语句

一、删除表格里重复某些值的数据行,并只保留一条记录!
条件:在表格里有一个唯一字段.

DELETE FROM [表名] WHERE 唯一字段 <> (SELECT TOP 1 唯一字段 FROM (SELECT 唯一字段 FROM [表名]) WHERE 重复字段=重复数据) AND 重复字段=重复数据

比如:你的表格名是SM_Test .唯一字段是ID,重复字段是MemberName 重复数据是user001.则SQL语句为:
DELETE FROM [SM_Test] WHERE ID <> (SELECT TOP 1 ID FROM (SELECT ID FROM [SM_Test]) WHERE MemberName='user001') AND MemberName='user001'

二、论坛短信息功能实例。
    
假如有A表[用户表]:有ID,MemberName等等字段。

     B表[用户短信息数据表]:有ID,SendMemberID,ToMemberID,Saying,IsSend等等字段。

     当发送一条短信息时,必须给发送人,和接收人分别加入一条短信息。如:A用户发给B用户一条短信息,则在数据库必须添加两条记录[数据行的数据一样,只是IsSend的值不相同,用于区分发送还是接收)。这样A,B用户管理管理短信息而互不相影响。

但问题也来啦,当如果发送的不是一个用户,而是二个或多个(如发送给所有人)是不是必须先分别取出所有接收用户的ID值呢?我以前也是这样使用,即先取出所有接收用户的ID值,然后再一条条Insert进数据库。但后来想了想,其实用一句SQL语句即可以做到。

      因为将信息保存进用户的“接收箱”[B表[时只是ToMemberID的值改变而已,其它是固定的。并且该值是从A表的ID字段里取出,所以我们用以下语句即可做到“保存信息到接收箱”的动作。

     这里假设发送方的用户ID为222,Saying为“测试发送信息”:

       INSERT INTO [B表] (SendMemberID,ToMemberID,Saying,IsSend) SELECT 222,ID,'测试发送信息',False FROM [A表] WHERE 条件。

    这里主要的是“WHERE 条件”这里,当发送给所有人时,这里的条件可以去掉,当发送给某些人时这里可以改为“WHERE MemberName IN ('用户A','用户B','用户C')”  当然这里的用户是由你自己定义的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值