![](/img/trans.png)
[英]Select data from two tables. one table is parent/child and I need to get the parents without a relation
[英]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.