gpt4 book ai didi

SQL从左表中获取左连接值

转载 作者:行者123 更新时间:2023-11-29 13:40:59 25 4
gpt4 key购买 nike

我正在处理一个复杂的 sql 查询。只是为了解释我的问题的目的,我减少了以下简短查询:

 select a.column1 as field1,b.column2 as field 2,c.column3 as field3,COALESCE(SUM(d.paid_amt) OVER (PARTITION BY a.some_column),0)  as amount_paid  
from a Inner join b on b.column3=ac.olumn2
right join c on c.column4=b.column1
left join d on d.column2=a.column1 and d.column5 = a.column1
where ...//some conditions

所以我很确定这里发生了什么。我更关心 d 表上的最后一个左连接。如果 d 表没有匹配 d.column5 = a.column1 的记录,那么我不会得到任何结果。

但我试图以这样一种方式编写查询,即如果 d 表使用 where 条件 d.column5 = a.column1 返回任何值,那么我想使用这些值,否则如果d 表中没有记录我只想从以前的连接结果中获取记录并获取我需要的记录。

这里对于当前查询,问题如预期的那样,如果连接不匹配 where 条件,则它会删除所有记录。无论 where 条件是否满足,我都想要记录。

我不太确定如何在一个查询中执行此操作。任何建议表示赞赏。

注意:@scaisEdge 和@Zaynul Answer 工作正常。但问题是如果我在连接和子句上移动条件,则计算量。 am ount 计算也应该在相同的条件下 d.column5 = a.column1。所以我不太确定如何克服这个问题:(

示例日期如下:

field1 | field2 | field3 | ampount_paid | some_column_to_match
--------------------------------------------------------------
name | value1 | other1 | 100 | 1
name1 | value2 | other2 | 100 | 1
name2 | value3 | other3 | 100 | 2

所以我刚刚添加了最后一列来解释我想要的总和。我只想在 some_column_to_match 匹配时对字段求和。所以我试图获得如下输出:

field1 | field2 | field3 | amount_paid | some_column_to_match
--------------------------------------------------------------
name | value1 | other1 | 200 | 1
name1 | value2 | other2 | 200 | 1
name2 | value3 | other3 | 100 | 2

所以基本上计算应该是 amount_paid 中所有值的总和,其中 some_column_to_match 值匹配。因此,在上面的示例中,前两列应该返回 200,因为它在每个单独的字段中返回 100 以获得相同的值。

最佳答案

如果你想要左连接,那么你不应该在 where 条件下使用左连接表 (d.column5 = a.column1) 的列,这样连接就变成了内部连接
在这些情况下,在相应的 ON 类中添加与左连接表相关的列的条件

select a.column1
,b.column2
,c.column3
,d.column4
from a Inner join b on b.column3=ac.olumn2
right join c on c.column4=b.column1
left join d on d.column2=a.column1 AND d.column5 = a.column1

关于SQL从左表中获取左连接值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55442408/

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