gpt4 book ai didi

mysql左连接返回不存在于日期范围内的记录

转载 作者:行者123 更新时间:2023-11-29 18:21:33 25 4
gpt4 key购买 nike

我需要从表 1 中查找在特定日期范围内未从表 2 中引用的记录,即 T1 中的元素集,在 T2 中的某个日期范围内没有引用这些元素。

在我看来,这是两个子查询的左连接的组合。

逻辑:

查询1:AllT1Records:返回T1中的所有记录

查询 2:AllT1RefsInDateRange:特定日期范围内 T2 对 T1 的所有引用

查询 3:返回 AllT1Records 中不存在于 AllT1RefsInDateRange 中的记录

这让我完成了部分工作,但返回了 T1 中的所有记录,而 T2 中没有引用:

select T1.name, T2.rackName, T2.allocationStart
From T1

LEFT JOIN
T2 on T1.name = T2.rackName

where T2.allocationStart is null

这将获取某个日期范围内的所有 T1 引用:

select T1.name, T2.rackName, T2.allocationStart from T2, T1

where T2.allocationStart > date_sub(curdate(),INTERVAL 60 day)
and T1.name = T2.rackName

group by T1.name

我需要的是 T1 中的所有记录,而 T2 中没有特定日期范围的引用。我怎样才能实现这一目标?

最佳答案

It seems to me to be a combination of left join of two sub queries.

我不明白你为什么这么说。您提供的第一个“子查询”返回表 T1 的所有内容,因此相当于 T1 本身。现在,虽然您可以形成 T2 中某些记录的内联 View 并形成左连接,但这有点过头了。我,我会这样做:

select T1.*
from T1
left join T2
on T1.name = T2.rackName
and T2.allocationStart > date_sub(curdate(),INTERVAL 60 day)
where T2.rackName is null

这建立在您提出的第二个查询的基础上,根据您的断言,T2.allocationStart 上的条件具有您想要的效果。请注意,我已将该标准合并到连接条件中,这对于实现您想要的效果非常重要。然后,where 子句选择那些代表 T1 行但没有对应的 T2 行的行(根据连接条件);我们可以确定没有选择其他行,因为如果 T2.rackName 为 null,则不可能是 T2.rackName = T1.name,即使 T1.name 也是 null。

关于mysql左连接返回不存在于日期范围内的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com