微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从关联表中删除条目,需要从另外两个表中查找

如何解决如何从关联表中删除条目,需要从另外两个表中查找

背景

  • 列表项asset_table包含列{asset_tag,asset_id}
  • 列表项目合同表具有列{contract_number,contract_id}
  • 列表项asset_contract表具有列{contract_id,asset_id}

问题: 我有一个asset_tag以及要添加的合同编号列表和要删除的合同编号列表。

现在我执行以下操作:

  1. 从资产标签中查找资产。id。
  2. 从合同编号中查找合同ID。
  3. 执行查询以从关联表中添加删除记录。

是否可以删除单个查询中的关联,而不是3个单独的交易?

解决方法

如果要删除,一个可移植的选项使用exists

delete from asset_contract 
where exists (select 1 from asset a    where a.asset_id    = asset_contract.asset_id    and a.asset_tag       = ?)
  and exists (select 1 from contract c where c.contract_id = asset_contract.contract_id and c.contract_number = ?)

对于insert,您可以这样做:

insert into asset_contract (contract_id,asset_id)
select c.contract_id,a.asset_id
from asset a
cross join contract c
where a.asset_tag = ? and c.contract_number = ?

问号代表查询的参数(资产标签和合同编号)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。