带条件sql的左外连接

Posted

技术标签:

【中文标题】带条件sql的左外连接【英文标题】:Left outer join with condition sql 【发布时间】:2021-08-26 16:21:17 【问题描述】:

有人知道是否有办法进行有条件的左外连接吗?我有带有实际值的分类帐表和要从中分配 BMDIV 的参考部门表。 但部门参考表包含 LC 编号或 = 'xx' 我想要做的是将分类帐表与 LCTRYNUM、LC 和 DEPTNUM 上的部门表连接,但在 LC = '**' 的情况下,连接将只有 LCTRYNUM 和 DEPTNUM。

总账明细表

LCTRYNUM LC DEPTNUM Amount
618 40 30813 100
618 50 30813 200
618 60 30813 300
618 10 30813 100

事业部参考表

LCTRYNUM LC DEPTNUM BMDIV
618 ** 30813 30
618 10 30813 2P

预期的结果是这样的

LCTRYNUM LC DEPTNUM Amount BMDIV
618 40 30813 100 30
618 50 30813 200 30
618 60 30813 300 30
618 10 30813 100 2P

【问题讨论】:

【参考方案1】:

您可以使用两个left joins,第一个用于引入直接匹配,第二个用于默认匹配:

select a.*, coalesce(d.bmdiv, d_default.bmdiv) as bmdiv
from actual a left join
     divisions d
     on a.lc = d.lc left join
     divisions d_default
     on d_default.lc = '**'

【讨论】:

谢谢戈登。这个解决方案正是我想要的。

以上是关于带条件sql的左外连接的主要内容,如果未能解决你的问题,请参考以下文章

LINQ:具有多个条件的左外连接

sql查询中的左外连接

SQL - 范围之间的左外连接

使用 Linq to Sql 的左外连接结果问题

删除重复的左外连接

使用 LINQ 查询语法 EF Core C# 的左外连接