gpt4 book ai didi

sql - 需要左表的所有记录,但如果右表匹配,我有进一步的限制

转载 作者:行者123 更新时间:2023-12-04 20:52:33 24 4
gpt4 key购买 nike

我发现了非常相似的问题,它们都涉及 WHERE 子句中的限制问题,无法达到 LEFT JOIN 的预期效果。但我无法将这些问题和答案扩展到我的情况。

无论右表是否匹配,我都需要左表的所有记录。如果在正确的表上有一个匹配项,则可能会有多个匹配项,我会运行一个子查询来获取正确的匹配项。

左表每行都有一个键和一个计费周期名称,右表有相同的键和日期交易。如果键匹配,则我只需要返回右表中的记录,该记录的交易日期是匹配左表记录中相应计费周期的最新交易日期。

因此,因为从右表中选择正确匹配记录的 WHERE 语句是一个子查询,所以我不能将它放在 LEFT JOIN 的 ON 部分。

我的下一个方法是继续并让这个东西作为内部查询运行,然后将这些结果与第二个查询结合起来以获取不匹配的左表记录。这听起来很糟糕,但我对蛮力方法并不陌生。

key1 billing_period                   key2      date     value
1 period_1 1 date_1 a1
2 period_1 1 date_2 a2
3 period_1 1 date_3 a3
4 period_1 3 date_1 a4
3 date_4 a6

期望的输出是

 1   period_1  date_2  a2
2 period_1
3 period_1 date_4 a6
4 period_1

因为 a) 我想要左表中的所有记录,并且 b) date_2 是要在键值为 1 的那些日期中选择的正确日期,而 date_4 满足键匹配的所有可用日期中的条件值为 3。这些日期是仍在相应 period_x 内的最新日期。

伪代码是“如果存在匹配项 key1 = key2,则对于所有此类匹配项,返回具有在 billing_period 内的最新日期的匹配项。如果完全不匹配,则返回左表记录'。

最佳答案

基本上你需要一个带条件的左连接:

A LEFT JOIN B
WHERE B.SomeColumn IS NULL OR (some condition)

关于sql - 需要左表的所有记录,但如果右表匹配,我有进一步的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19853043/

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