gpt4 book ai didi

MySQL 左连接 : if primary condition does not exist use backup condition return only one

转载 作者:行者123 更新时间:2023-11-29 14:09:21 26 4
gpt4 key购买 nike

我见过这个问题的各种变体,但要么它们不适用,要么我不明白答案。

我有两张 table ,一张 table 上有收费类型,有额外费用,另一张 table 上有收费。我想加入他们以获得适当的值(value)观。我想加入收费在开始日期和结束日期之间以及类型上的表。如果没有匹配项,我希望它选择类型-1(日期的条件相同)。如果没有匹配项,我不希望它出现在结果中。

我最初打算做一个正常的左连接,按“type”desc排序,然后按“type”分组,相信这样只会留下第一种类型,但我读到MySQL建议不要这样做,因为group by可能是不可预测的,并不总是返回第一个匹配项。

表格:

startDate | endDate  | type | addCost
--------------------------------------
2010-01-01 2010-12-31 1 100
2010-01-01 2010-12-31 2 200
2010-01-01 2010-12-31 -1 50
2011-01-01 2012-02-20 3 350
2011-01-01 2012-02-20 1 150
2011-01-01 2012-02-20 -1 75


chargeDate | type | cost
---------------------------
2010-10-01 1 10
2010-11-01 2 20
2010-12-01 4 40
2011-02-01 3 60
2011-03-01 2 25
2011-04-01 4 25

期望的结果:

chargeDate | type | cost | addCost
---------------------------------
2010-10-01 1 10 100
2010-11-01 2 20 200
2010-12-01 4 40 50
2011-02-01 3 60 350
2011-03-01 2 25 75

最佳答案

我正在使用子查询,尝试将 chargescharges_types 连接起来。如果连接不成功,typenull,并且通过 coalesce,我将 type_c 设置为 - 1,否则我将其设置为type。然后我再次使用 charges_types 连接这个子查询,并在连接子句中使用 type_c 而不是 type:

select c.chargeDate, c.type, c.cost, ct.addCost
from
(select
charges.chargeDate,
charges.type,
coalesce(charges_types.type, -1) as type_c,
charges.cost
from
charges left join charges_types
on charges.chargeDate between charges_types.startDate and charges_types.endDate
and charges.type = charges_types.type) c
inner join charges_types ct
on c.chargeDate between ct.startDate and ct.endDate
and c.type_c = ct.type

关于MySQL 左连接 : if primary condition does not exist use backup condition return only one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764643/

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