【问题标题】:How to join two selects with no matching fields?如何加入没有匹配字段的两个选择?
【发布时间】:2020-12-26 16:00:35
【问题描述】:

我需要用这两个选择创建一个 DIM_TEAMS。第一个来自 NBA 球队,第二个来自 WNBA 球队。

SELECT
E.pk_estado_eeuu, D.pk_division, LEAGUE, CODE, 
EQUIPO, CIUDAD, PABELLON, FUNDADO, PATROCINIO,
T.CONFERENCIA
FROM
STG_NBA_TEAMS T
INNER JOIN STG_TEAM_CODES TC ON(T.EQUIPO = TC.TEAM)
INNER JOIN DIM_Estados_EEUU E ON (T.ESTADO = E.codigo)
INNER JOIN DIM_Divisiones D ON(D.division = T.DIVISION)

SELECT
e.pk_estado_eeuu,LEAGUE,CODE, EQUIPO,
CIUDAD, WT.CONFERENCIA
FROM
STG_WNBA_TEAMS WT
INNER JOIN STG_TEAM_CODES TC ON(WT.EQUIPO = TC.TEAM)
INNER JOIN DIM_Estados_EEUU E ON (WT.ESTADO = E.nombre)

这应该是我的预期输出

【问题讨论】:

  • 你想要UNION ALL吗?
  • JOIN 用于包含两个表的列。您需要一个 UNION 或 UNION ALL 来包含两个表的行。

标签: sql sql-server etl pentaho pdi


【解决方案1】:

使用union operator。您需要SELECT NULL,如果您没有从一个到另一个的字段:

SELECT
    E.pk_estado_eeuu, 
    D.pk_division, 
    LEAGUE, 
    CODE, 
    EQUIPO, 
    CIUDAD, 
    PABELLON, 
    FUNDADO, 
    PATROCINIO,
    T.CONFERENCIA
FROM
STG_NBA_TEAMS T
INNER JOIN STG_TEAM_CODES TC ON(T.EQUIPO = TC.TEAM)
INNER JOIN DIM_Estados_EEUU E ON (T.ESTADO = E.codigo)
INNER JOIN DIM_Divisiones D ON(D.division = T.DIVISION)
UNION
SELECT
    e.pk_estado_eeuu,
    NULL AS pk_division,
    LEAGUE,
    CODE, 
    EQUIPO,
    CIUDAD, 
    NULL AS PABELLON, 
    NULL AS FUNDADO, 
    NULL AS PATROCINIO,
    WT.CONFERENCIA
FROM
STG_WNBA_TEAMS WT
INNER JOIN STG_TEAM_CODES TC ON(WT.EQUIPO = TC.TEAM)
INNER JOIN DIM_Estados_EEUU E ON (WT.ESTADO = E.nombre)

【讨论】:

  • 您可以通过对 NBA 和 WNBA 球队执行 UNION ALL 来优化查询,然后只加入一次球队代码和状态表(而不是这里每个子查询一个)。
【解决方案2】:

您还可以使用 Pentaho 数据集成工具使用排序合并步骤来实现此目的,该步骤位于设计部分的连接类别下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    相关资源
    最近更新 更多