繁体   English   中英

我有两个选择查询和两个表。我需要开发第二个表,而没有第一个表中出现的重复项

[英]I have two select queries and two tables.I need to develop the second table without duplicates that will be present from the first table

我的第一个表的查询是:

Select * from orders where edited_date<DATE_SUB(now(),interval 48 hour);

我第二个表的查询是:

Select * from orders where edited_date<DATE_SUB(now(),interval 24 hour);

与第一个表相比,第二个表应仅显示过滤的记录。 我正在使用mysql。

您需要BETWEEN运算符在两个查询中排除重复项:

Select * from orders where edited_date BETWEEN DATE_SUB(now(),interval 24 hour) AND edited_date<DATE_SUB(now(),interval 48 hour);
Select * from orders where edited_date<DATE_SUB(now(),interval 48 hour);

根据您的评论,您似乎在这两个查询中重复了几行,并且正在寻找设置差异。 如果您有一个id列,则非常简单:

; WITH H48 AS (
    SELECT * FROM orders WHERE edited_date<DATE_SUB(now(),interval 48 hour)
), H24 AS (
    SELECT * FROM orders WHERE edited_date<DATE_SUB(now(),interval 24 hour)
)
SELECT * FROM H48 WHERE id NOT IN (SELECT id FROM H24);

是您要找的东西吗?

MySQL不支持INTERSECT和MINUS集合运算符。 INTERSECT运算符获取两个查询的结果,仅返回出现在两个结果集中的行。

MINUS运算符采用一个查询的不同行,并返回未出现在第二个结果集中的行。 我们可以使用JOIN运算符重写这些查询:

MINUS运算符的示例查询:

 SELECT x, y FROM table_a
 MINUS
 SELECT x, y FROM table_b;

在MySQL中:

 SELECT a.x, a.y
 FROM table_a a LEFT JOIN table_b b
 ON a.x = b.x AND a.y = b.y
 WHERE b.x IS NULL;

您可以在查询中尝试这种逻辑。

 Select a.* 
 from orders a LEFT JOIN orders b
 ON a.column=b.column   ---- add on condition
 where a.edited_date<DATE_SUB(now(),interval 48 hour) and        
       b.edited_date<DATE_SUB(now(),interval 48 hour)

供参考, 请参阅这篇文章

试试这个查询

Select orderid from orders 
where 
edited_date<DATE_SUB(now(),interval 24 hour) 
AND 
orderid 
NOT IN(Select orderid from orders where 
edited_date<DATE_SUB(now(),interval 48 hour))

小提琴上的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM