如何解决SQL - LEFT OUTER JOIN ON BETWEEN RANGE
我需要加入 4 个表,以便为每个 AccountID 找到正确的 AccountGroup。
问题是当我尝试在我的加入中使用“之间”时,我得到了错误的 AccountGroup 引用。
我有以下表格:
表:帐户
AccountID | AccountDesc |
---|---|
500050 | 测试 |
表:AccountDesc
AccountFromID | AccountToID | AccountGroup |
---|---|---|
500050 | 500050 | 其他成本 |
表:AccountExtended
AccountID |
---|
500050 |
500050_Seller |
500050_Purchaser |
表:AccountExtendedDesc
AccountID | AccountGrp1ID | AccountGrp2ID | AccountGroup |
---|---|---|---|
500050 | 500050_Seller | 500050_A | CostOfSeller |
500050 | 500050_Purchaser | 500050_A | CostOfSeller |
问题在于它返回的查询,我得到错误的 AccountGroup 为 500050,它同时返回了 OtherCost 和 CostOfSeller 的 GroupDescriptions。
表格:结果(错误)
AccountID | AccountDesc |
---|---|
500050 | CostOfSeller |
500050 | 其他成本 |
500050_Seller | CostOfSeller |
500050_Purchaser | CostOfSeller |
我只想
AccountID | AccountDesc |
---|---|
500050 | 其他成本 |
500050_Seller | CostOfSeller |
500050_Purchaser | CostOfSeller |
我的查询
SELECT AE.AccountID,isnull(A.AccountGroup,Ad.AccountGroup) as AccountGroup FROM
(
SELECT
AE.AccountID,Aed.AccountGroup
FROM Accounts A
RIGHT OUTER JOIN AccountExtended AE on left(AE.AccountID,6)=A.AccountID
LEFT OUTER JOIN AccountExtendedDesc Aed on Aed.AccGrp1ID= A.AccountID
) A
LEFT OUTER JOIN AccountDesc Ad on A.AccountID between Ad.AccountFromID and Ad.AccountToID
解决方法
我不确定我是否理解每个表之间的关系。我下面的代码假定 AccountExtendedDesc
表中的任何内容都将覆盖 AccountDesc
表中的任何内容。我忽略了 Accounts
表,因为我完全不确定它是否需要。
SELECT
ae.AccountID,isnull(aed.AccountGroup,ad.AccountGroup) as AccountGroup
FROM
AccountExtended ae
LEFT JOIN AccountDesc ad ON
ae.AccountID between ad.AccountFromID AND ad.AccountToID
LEFT JOIN AccountExtendedDesc aed ON
aed.AccountGrp1ID = ae.AccountID
,
下面的查询给出了你需要的结果。
SELECT A.AccountID,isnull(A.AccountGroup,Ad.AccountGroup) as AccountGroup FROM
(SELECT
AE.AccountID,Aed.AccountGroup
FROM Accounts A
RIGHT OUTER JOIN AccountExtended AE on left(AE.AccountID,6)=A.AccountID
LEFT OUTER JOIN AccountExtendedDesc Aed on Aed.AccountGrp1ID= AE.AccountID
) A
LEFT OUTER JOIN AccountDesc Ad on A.AccountID between Ad.AccountFromID and Ad.AccountToID
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。