我有一个名为 ProductLog RequestID
的表格。此处Product
和select RequestID, Product from ProductLog where Date < '201505161505'
EXCEPT
select RequestID, Product from ProductLog where Product not in (
select distinct Product from ProductLog where Date > '201505161505'
)
是复合主键。
现在有一种清洁工具可以在几天后清洁产品。显然,清洁是直切的。如果日期少于15天,则删除它。现在出现了一些情况 - 假设有一种产品可以记录18天。现在,如果我们删除的数据少于15天,那么它将删除该产品。每个产品数据都应该存在,因为它用于某些监控目的。现在删除要求已更改。
选择产品。
现在我正在尝试使用像
这样的查询RequestID
我可以选择应删除的数据。现在我必须删除它。由于Product
和IN
是复合主键,因此我无法使用catch
进行删除。有谁知道我怎么能实现这个目标?
答案 0 :(得分:2)
如果您只是想根据上面的查询编写删除语句,我会使用EXISTS
查询同时处理这两列(RequestID
和Product
)。
DELETE
FROM ProductLog
WHERE EXISTS (
SELECT *
FROM (
SELECT RequestID
,Product
FROM ProductLog
WHERE DATE < '201505161505'
EXCEPT
SELECT RequestID
,Product
FROM ProductLog p
WHERE NOT EXISTS (
SELECT *
FROM ProductLog p1
WHERE p.product = p1.product
AND DATE > '201505161505'
)
) t
WHERE t.RequestID = ProductLog.RequestID
AND t.Product = ProductLog.Product
);
另外,我会在您的子查询中使用NOT EXISTS
而不是NOT IN
。
关于NOT EXISTS和NOT IN的最重要的事情是, 与EXISTS和IN不同,它们在所有情况下都不相同。 具体来说,当涉及NULL时,它们将返回不同的值 结果。完全具体,当子查询返回一个时 null,NOT IN将不匹配任何行。
答案 1 :(得分:0)
添加要保留到产品表的天数。然后:
html{
overflow-y: scroll;
}
.container {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: gray;
}