首页 > 解决方案 > SQL 问题在同一个表中查找值

问题描述

尝试在 SQL 中使用自联接来查找表中的值并应用它。

她是我得到的:

+-----------------+-----+--------+------------+

| 实际输出 | | | |

+-----------------+-----+--------+------------+

| TRKID | 脸谱 | 新Fac | BAG_TRKID |

| 第449章 11 | 11 | 999 |

| 第473章 11 | 11 | 第737章

| 第477章 11 | 11 | 第737章

| 第482章 11 | 11 | 第737章

| 第737章 89 | 89 | |


| 期望输出 | | | |

| TRKID | 脸谱 | 新Fac | BAG_TRKID |

| 第449章 11 | 11 | 999 |

| 第473章 11 | 89 | 第737章

| 第477章 11 | 89 | 第737章

| 第482章 11 | 89 | 第737章

| 第737章 89 | 89 | |

+-----------------+-----+--------+------------+

这是下面的代码。我似乎无法得到我想要的桌子。Bag TrkID 的设施编号不会成为 TrkID 的新设施编号。

Select 
    TABLEA.TRKID,
    TABLEA.FAC,
    NVL(TABLEA.FAC, TABLEB.FAC) as NEWFAC,
    TABLEA.BAG_TRKID        

FROM
    (
    Select
    HSD. TRKID,
    HSD.NLPT as FAC,
    SBPD.BAG_TRKID
    From
    HSD
    LEFT JOIN
    SBPD
    ON
    SBPD.BAG_TRKID = HSD. TRKID

Where
    HSD.SCANDT BETWEEN   ‘Yesterday’ and ‘Today’
) TABLEA

LEFT JOIN
(
    Select
    HSD. TRKID,
    HSD.NLPT as FAC,
    SBPD.BAG_TRKID
    From
    HSD
    LEFT JOIN
    SBPD
    ON
    SBPD.BAG_TRKID = HSD. TRKID

Where                              
    HSD.SCANDT BETWEEN   ‘Yesterday’ and ‘Today’
) TABLEB

ON
TABLEA.TRKID = TABLEB.BAG_TRKID

标签: sqljoinnullself-join

解决方案


也许像

select a.TrkID, a."Facility Number", a.BAG_TRKID, b.TrkID as "NEW Fac"
from tbl a
left join tbl b on (a.TrkID = b.trk_id_reference)

推荐阅读