如何使用 join 和 where 子句从表中删除? [复制]
Posted
技术标签:
【中文标题】如何使用 join 和 where 子句从表中删除? [复制]【英文标题】:How can I delete from a table using the join and where clause? [duplicate] 【发布时间】:2019-03-08 19:11:27 【问题描述】:以下是我目前的代码,选择查询是我想从事件表中删除的内容。
declare @maxsnapevent table (sita varchar(10), snap date)
insert into @maxsnapevent
select sita, max(snapshot_date) from ukrmc.dbo.strategy group by sita
--select * from @maxsnapevent
--need to delete everything that the following code gives
select events.sita, events.date, events.event from ukrmc.dbo.events events
join @maxsnapevent max on max.sita = events.sita
where date >= max.snap and events.sita != 'lcypd' and events.sita != 'lonza'
来自策略表的示例数据:
date sita Event Snapshot_date
2018-01-01 London Bank Holiday 2017-12-31
2018-01-02 London 2017-12-31
2018-01-03 London 2017-12-31
2018-01-04 London Concert 2017-12-31
2018-01-02 London 2018-01-01
2018-01-03 London 2018-01-01
2018-01-04 London Concert 2018-01-01
2018-01-01 Bham Bank Holiday 2017-12-31
2018-01-02 Bham 2017-12-31
2018-01-03 Bham 2017-12-31
2018-01-04 Bham 2017-12-31
2018-01-02 Bham 2018-01-01
2018-01-03 Bham Charity 2018-01-01
2018-01-04 Bham 2018-01-01
事件表中的示例数据:
date sita Event
2018-01-01 London Bank Holiday
2018-01-02 London
2018-01-03 London
2018-01-04 London Concert
2018-01-01 Bham Bank Holiday
2018-01-02 Bham
2018-01-03 Bham
2018-01-04 Bham Concert
如您所见,每个快照都有多个站点和多个日期。
【问题讨论】:
这在文档中描述,在Using joins and subqueries to data in one table to delete rows in another table 部分:DELETE SomeTable FROM SomeTable Inner Join Other table...
【参考方案1】:
您是否尝试过下一个代码?
delete events
from ukrmc.dbo.events events
join @maxsnapevent max on max.sita = events.sita
where date >= max.snap and events.sita != 'lcypd' and events.sita != 'lonza'
【讨论】:
第一行应该删除 sita, date, event 吗?? @Sorath 不,您不删除列,而是删除行。 @Sorath 不,第一行指示您要执行删除的表。您删除 ROWS,而不是列。我建议您阅读有关 SQL Server 中 DML 操作的更多信息。微软为此提供了令人难以置信的文档。 非常感谢你们的帮助!以上是关于如何使用 join 和 where 子句从表中删除? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CodeIgniter 中使用 JOIN 和 get_where 子句
Spark SQL 中的 where 子句与 join 子句