数据库操作之同时一条sql删除两个表格中的数据

先骂一顿csdn吧,虽然最开始是在csdn上写的博客,而且从csdn上查到了很多资料,但是csdn使用实在是差劲。账号管理莫名其妙,有的时候把我的id和qq号搞混了;有时候经常发不了博文,无法点击。算了,不说了。

不记得之前是解决什么问题了,用到了很复杂的一条语句,在这大概描述下。
问题:一条sql语句同时删除两个表中相同记录
1.精简版的
delete a,b from table_a a,table_b b where a.id=b.id;
2.复杂版的
delete a,b from table_a a,table_b b where a.id in(select c.id from (select * from table_a a where a.id in (select b.id from table_b b group by b.id having count(*) > 0)) c);
上述两种结果是一样的。
第二种虽然复杂,但是有些场合是可以使用的。

此外还有触发器版的,

create trigger tr_name on table1
for delete
as
delete from table2 where id in (select id from deleted)

然后删除
delete table1 where id条件。挺精巧的,可以仔细理解下。

转载于:https://my.oschina.net/u/3152471/blog/848083

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前面做项目,有数据库操作太慢。 而且,有一些新的程序员,他们对数据库操作的经验比较欠缺, 而且,.net需要学的东西就非常多,涵盖很多,还要程序员精通数据库,就更加麻烦,没有好多年的经验, 操作数据库的,一检查就有很多问题。所以,根据需要,我就找到了这个 简单的,高效,快速,方便的 .net数据库操作方案。非常直观。不需要懂数据库都能开发了。 找了好久,总算找到了,分享给大家。 ---------------------------- ------------------------------ SqLamdalf1.0 ----------================-----------================--------- .net与数据库最佳操作类。 无缝衔接sql server和.net。 不需要为操作数据库再话费大量的开发时间,节约开发成本,以及更高效,更快速,更方便。 以后将陆续支持更多的数据库。 ----------================-----------================--------- SqLamdalf1.0免费版,欢迎使用。 使用方法: 双击setup.exe 安装以后。 桌面会出现 SqLamdalf 然后直接添加到需要的程序引用,就可以使用了。 ============================================================== 调用方法: using SqlLamdalf; //工厂方法建立连接字符串 SqlLamdalf.FactoryAnna factorySql = new SqlLamdalf.FactoryAnna(AnnaType.SqlServer, "Persist Security Info=False;Integrated Security=SSPI;Database=数据库名称;Server=sql服务器名称"); //对需要的表的对象建立对象Sql。下面例子为两个表,目前已经支持9个表: var Sql = factorySql.Create(); //目前支持返回 1实体类Sql.ExecuteEntity,2实体类列表,3表格,4字符串,5int var sdfsf123 = Sql.ExecuteList((a, b) => Sub.Top(8).Select(a.UserId, a.UserName).From(a) ); //目前支持返回 1实体类Sql.ExecuteEntity,2实体类列表,3表格,4字符串,5int var sdfsf123 = Sql.ExecuteList((a, b) => Sub.Top(8).Select(a.UserId, a.UserName).From(a) ); //分页查询如下,注意OrderBy免费版请取消 DataTable dtUser = Sql.ExecuteDataTable((a, b) => Sub.PageSize(12).PageIndex(2).Select(a.UserId.As("ID号"), a.UserName.As("名字")).From(a).OrderBy(a.CreateDate.Desc()) ); //如需执行多条语句,请在语句后面加上Next() var sdfsf1113 = Sql.ExecuteList((a, b) => Sub.Insert(a).Values("213", "111", 11, "2012-02-02"). Next(). Select("213", "111", 11, "2012-02-02").From(a).Where(a.UserId == 123123) ); //下面是联结方式的多表查询,支持各种联结查询,&&意味and,LikeLeft意为Like '%name',LikeRight var sdfsf21 = Sql.ExecuteNonQuery((a, b) => Sub.Update(a).Set(a.RoleId == u1.RoleId, a.LoginPassword == irod.ToString(), a.UserName == "2").From(a). InnerJoin(b).On(a.UserId == b.CategoryId) .Where(a.UserId == 1 && (a.UserName + "123").LikeLeft(u1.UserName)) );
### 回答1: 如果您的问题是关于如何计算PostgreSQL数据库两列数据的差异,可以使用以下SQL查询语句: ``` SELECT column1 - column2 AS difference FROM your_table; ``` 其,`column1`和`column2`是您要比较的两列数据,`your_table`是包含这两列数据的表名。这将计算出这两列数据的差异并返回一个新的包含差异值的列。 如果您的问题是关于如何在PostgreSQL数据库删除两列数据之间的相同值,请使用以下SQL查询语句: ``` DELETE FROM your_table WHERE column1 = column2; ``` 其,`column1`和`column2`是您要比较的两列数据,`your_table`是包含这两列数据的表名。这将从表删除那些这两列数据相同的行。 ### 回答2: 在Postgres数据库,我们可以使用算术运算符将两个列的数据进行相减操作。 假设我们有一个表格名为"students",其有两个列"score1"和"score2",分别表示某个学生的第一次和第二次考试成绩。 要计算这两个列的差值,可以使用以下SQL查询语句: SELECT score2 - score1 AS score_diff FROM students; 这条查询语句将计算两个列之间的差值,并将结果存储在名为"score_diff"的新列。 如果我们希望查询结果只包含差值大于10的记录,可以添加WHERE子句: SELECT score2 - score1 AS score_diff FROM students WHERE score2 - score1 > 10; 这将返回差值大于10的记录。 需要注意的是,如果两个列数据类型不兼容,可能会导致相减操作失败。因此,在进行相减操作之前,应确保数据类型相匹配。 另外,如果我们希望将差值作为一个新的列添加到表格,可以使用ALTER TABLE语句: ALTER TABLE students ADD COLUMN score_diff INTEGER; 然后,可以使用UPDATE语句将差值添加到新列: UPDATE students SET score_diff = score2 - score1; 以上就是在Postgres数据库将两个列的数据相减的方法。 ### 回答3: 在Postgres数据库,我们可以使用减法操作符(-)将两个列的数据进行相减。假设我们有一个名为table的表,其包含两个列A和B,并且我们希望计算A列与B列的差值。 我们可以使用以下查询语句来实现: ``` SELECT A - B AS difference FROM table; ``` 这将返回一个名为difference的新列,其包含A列与B列的差值。我们可以根据需要更改SELECT语句的列名。 例如,如果A列的值为5,B列的值为3,则查询将返回结果为2的新列difference。我们可以通过在SELECT语句选择其他列来附加差值列。 需要注意的是,要进行减法操作,两个列的数据类型必须兼容。如果它们的数据类型不同,可能需要进行适当的类型转换以确保减法操作的正确执行。 希望这个回答能解决你的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值