SQL从左表中获取左连接值
Posted
技术标签:
【中文标题】SQL从左表中获取左连接值【英文标题】:SQL get left join values from left table 【发布时间】:2019-03-31 15:22:31 【问题描述】:我正在处理一个复杂的 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 答案工作正常。但问题是如果我将条件移动到连接和子句中的数量计算。数量计算也应该在相同的条件下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。
【问题讨论】:
不要混用left join
和 right join
。我从来没有发现这很有用。
【参考方案1】:
如果你想要一个左连接,那么你不应该在 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
【讨论】:
谢谢 会试试这个并在这里发布结果 感谢它按预期工作。但这会导致另一个问题。我已经相应地更新了这个问题。我正在尝试根据某些条件对 d 表中某些列的值求和。这导致了我不需要的不正确的值。抱歉,如果不清楚,请告诉我,我会尽力纠正并更好地解释。 获得解决方案后更改答案是不公平的..所以不是编码服务。是一个问答网站所以.而不是改变你的问题..你应该评价我的或其他权利以正确的方式回答并在新的单独问题中发布新问题..... 对不起,我不是故意的。我只是改变了问题,因为我觉得我一开始就没有正确解释这个问题。那是我的错。如果您认为需要这样,我可以回复问题并开始一个新线程。正如所说,您的第一个解决方案是一个宝石,我对第一篇文章的期望是什么。 :( @ging 谢谢.. 并评论我你的新问题的链接.. 这样我也可以尝试评估这个问题以上是关于SQL从左表中获取左连接值的主要内容,如果未能解决你的问题,请参考以下文章