【问题标题】:"Conditional" join to different tables“有条件”连接到不同的表
【发布时间】:2017-09-26 12:49:20
【问题描述】:

我有 3 个数据库需要提取数据(我们称它们为 DB1、DB2 和 DB3)。

从 DB1 中,我选择一个返回如下内容的查询:

ORDER      DESC      TOTAL    ORGANIZATION
=============================================
262     Order1    5129       116
629     Order2    123        138
915     Order3    95         138
159     Order4    1932       116

我从 DB2 和 DB3 中选择此信息(两个表相同,但具有来自不同组织的不同数据)

DB2 (ORG 116):

ORDER     TYPE
==================
262      2
159      5
856      3
629      2

DB3 (ORG 138):

ORDER     TYPE
==================
629      1
915      4
012      1
262      5

如您所见,两个组织的订单号可以相同但类型不同。

如何将 DB1 与 DB2 和/或 DB3 连接以提取 TYPE 列,但要根据 DB1 组织的列寻找不同的 DB?

结果会是这样的:

ORDER      DESC      TOTAL    ORGANIZATION     TYPE
===========================================================
262     Order1    5129          116             2
629     Order2    123           138             1
915     Order3    95            138             4
159     Order4    1932          116             5

对于 ORDER 262,我从 DB2 获得了 Type 2(不是从 DB3,因为 ORG 是 116),对于 ORDER 629,我从 DB3 获得了 Type 1(不是从 DB2,因为 ORG 是 138)。

我的简化查询是这样的(我使用 WITH...AS,因为查询很长,而且每个查询都来自不同的服务器,所以这样一切看起来更有条理):

With EAM as (
Select Order, Desc, Total, Organization
from Table1
),
AP116 as (
select order, type
from table2
),
AP138 as (
select order, type
from table3
)
select *
from EAM inner join AP116 on EAM.order = AP116.order

此查询工作正常,但将所有订单与 AP116 链接。我需要使用 CASE 或其他东西让我根据最后一行的 ORG 选择 AP116 或 AP138。

【问题讨论】:

  • LEFT JOIN 到所有表,只需使用CASE 语句选择您需要的值?

标签: sql-server join


【解决方案1】:

对于一组离散的不同数据库,我建议将其编写为联合:

Select Order, Desc, Total, Organization, Table2.Type
from Table1
join Table2 on...
where Organization = 116

union

Select Order, Desc, Total, Organization, Table3.Type
from Table1
join Table3 on...
where Organization = 138

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多