[英]How to delete result query from sql?
我想删除这个结果表单数据库。请帮帮我。
select *
FROM stock_batch AS a
INNER JOIN
(
SELECT stockid, Max(batchid) AS batchid
FROM stock_batch
GROUP BY stockid
) AS b
ON a.stockid = b.stockid
AND a.batchid < b.batchid
如果您使用的是sql server
,那么您可以执行以下操作。 只需将SELECT *
替换为DELETE a
即可。 注意: a
是您用于表的别名。
DELETE a
FROM stock_batch AS a
INNER JOIN
(
SELECT stockid, Max(batchid) AS batchid
FROM stock_batch
GROUP BY stockid
) AS b
ON a.stockid = b.stockid
AND a.batchid < b.batchid
如果您使用 SQL SERVER,您可以使用 CTE,如下所示。
WITH CTE AS(
select *
FROM stock_batch AS a
INNER JOIN
(
SELECT stockid, Max(batchid) AS batchid
FROM stock_batch
GROUP BY stockid
) AS b
ON a.stockid = b.stockid
AND a.batchid < b.batchid)
delete from stock_batch WHERE STOCKid IN(SELECT stockid FROM CTE)
您可以使用这个标准的 dml 删除脚本
DELETE
FROM stock_batch
WHERE stockid in
(select stockid from
(select a.stockid
FROM stock_batch AS a
INNER JOIN
(
SELECT stockid, Max(batchid) AS batchid
FROM stock_batch
GROUP BY stockid
) AS b
ON a.stockid = b.stockid
AND a.batchid < b.batchid
) as t1
)
您可以简单地使用 DELETE 如下所示 DELETE a FROM #stock_batch 作为 INNER JOIN
( SELECT stockid, Max(batchid) AS batchid FROM #stock_batch GROUP BY stockid ) AS b ON a.stockid = b.stockid AND a.batchid < b.batchid
如果您只想保留每个库存的最新批次,我建议您使用以下方法之一:
with todelete as (
select sb.*,
row_number() over (partition by stockid order by batchid desc) as seqnum
from stock_batch sb
)
delete from todelete
where seqnum = 1;
或者:
delete sb from stock_batch sb
where sb.batchid < (select max(sb2.batchid)
from stock_batch sb2
where sb.stockid = sb2.stockid
);
这两个都可以利用stock_batch(stockid, batchid)
上的索引。 但是,如果您要删除许多行,这可能仍然很慢。 在这种情况下,还有其他可能更快的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.