简体   繁体   中英

How to write a sql query to do multiple joins with the same table

I am trying to write a SQL query to fetch data from two tables. One table A has 9 fields which are primary key relation to table B.

SELECT JBO8.posid
    , JbO8.actnm
    , JBO8.prntposid
    , JBO8.lngcd
    , JBO8.H0
    , JBO8.h1
    , JBO8.h2
    , JBO8.h3
    , JBO8.h4
    , JBO8.h5
    , JBO8.H6
    , JBO8.H7
    , JBO8.H8
    , organization.name AS H9
FROM (
    SELECT JBO7.posid
        , JbO7.actnm
        , JBO7.prntposid
        , JBO7.lngcd
        , JBO7.H0
        , JBO7.h1
        , JBO7.h2
        , JBO7.h3
        , JBO7.h4
        , JBO7.h5
        , JBO7.H6
        , JBO7.H7
        , organization.name AS H8
        , JBO7.hierarchylvl9
    FROM (
        SELECT JBO6.posid
            , JbO6.actnm
            , JBO6.prntposid
            , JBO6.lngcd
            , JBO6.H0
            , JBO6.h1
            , JBO6.h2
            , JBO6.h3
            , JBO6.h4
            , JBO6.h5
            , JBO6.H6
            , organization.name AS H7
            , JBO6.hierarchylvl8
            , JBO6.hierarchylvl9
        FROM (
            SELECT JBO5.posid
                , JbO5.actnm
                , JBO5.prntposid
                , JBO5.lngcd
                , JBO5.H0
                , JBO5.h1
                , JBO5.h2
                , JBO5.h3
                , JBO5.h4
                , JBO5.h5
                , organization.name AS H6
                , JBO5.hierarchylvl7
                , JBO5.hierarchylvl8
                , JBO5.hierarchylvl9
            FROM (
                SELECT JBO4.posid
                    , JbO4.actnm
                    , JBO4.prntposid
                    , JBO4.lngcd
                    , JBO4.H0
                    , JBO4.h1
                    , JBO4.h2
                    , JBO4.h3
                    , JBO4.h4
                    , organization.name AS H5
                    , JBO4.hierarchylvl6
                    , JBO4.hierarchylvl7
                    , JBO4.hierarchylvl8
                    , JBO4.hierarchylvl9
                FROM (
                    SELECT JBO3.posid
                        , JbO3.actnm
                        , JBO3.prntposid
                        , JBO3.lngcd
                        , JBO3.H0
                        , JBO3.h1
                        , JBO3.h2
                        , JBO3.h3
                        , organization.name AS H4
                        , JBO3.hierarchylvl5
                        , JBO3.hierarchylvl6
                        , JBO3.hierarchylvl7
                        , JBO3.hierarchylvl8
                        , JBO3.hierarchylvl9
                    FROM (
                        SELECT JBO2.posid
                            , JbO2.actnm
                            , JBO2.prntposid
                            , JBO2.lngcd
                            , JBO2.H0
                            , JBO2.h1
                            , JBO2.h2
                            , organization.name AS H3
                            , JBO2.hierarchylvl4
                            , JBO2.hierarchylvl5
                            , JBO2.hierarchylvl6
                            , JBO2.hierarchylvl7
                            , JBO2.hierarchylvl8
                            , JBO2.hierarchylvl9
                        FROM (
                            SELECT JBO1.posid
                                , JbO1.actnm
                                , JBO1.prntposid
                                , JBO1.lngcd
                                , JBO1.H0
                                , JBO1.h1
                                , organization.name AS H2
                                , JBO1.Hierarchylvl3
                                , JBO1.hierarchylvl4
                                , JBO1.hierarchylvl5
                                , JBO1.hierarchylvl6
                                , JBO1.hierarchylvl7
                                , JBO1.hierarchylvl8
                                , JBO1.hierarchylvl9
                            FROM (
                                SELECT JBO0.posid
                                    , JbO0.actnm
                                    , JBO0.prntposid
                                    , JBO0.lngcd
                                    , JBO0.H0
                                    , organization.name AS h1
                                    , JBO0.hierarchylvl2
                                    , JBO0.Hierarchylvl3
                                    , JBO0.hierarchylvl4
                                    , JBO0.hierarchylvl5
                                    , JBO0.hierarchylvl6
                                    , JBO0.hierarchylvl7
                                    , JBO0.hierarchylvl8
                                    , JBO0.hierarchylvl9
                                FROM (
                                    SELECT posid
                                        , actnm
                                        , prntposid
                                        , lngcd
                                        , Organization.Name AS H0
                                        , Hierarchylvl1
                                        , hierarchylvl2
                                        , hierarchylvl3
                                        , hierarchylvl4
                                        , hierarchylvl5
                                        , hierarchylvl6
                                        , hierarchylvl7
                                        , hierarchylvl8
                                        , hierarchylvl9
                                    FROM Jobposition
                                    JOIN Organization ON Jobposition.Hierarchylvl0 = organization.OrganizationPk
                                    ) AS JBO0
                                JOIN Organization ON JBO0.hierachylvl1 = organization.organizationpk
                                ) AS JBO1
                            JOIN organization ON Jbo1.hierarchylvl2 = organization.organizationpk
                            ) AS JBO2
                        JOIN Organization ON JBO2.hierarchylvl3 = organization.organizationpk
                        ) AS JBO3
                    JOIN Organization ON JBO3.hierarchylvl4 = organization.organizationpk
                    ) AS JBO4
                JOIN Organization ON JBO4.hierarchylvl5 = organization.organizationpk
                ) AS JBO5
            JOIN Organization ON JBO5.hierarchylvl6 = organization.organizationpk
            ) AS JBO6
        JOIN Organization ON JBO6.hierarchylvl7 = organization.organizationpk
        ) AS JBO7
    JOIN Organization ON JBO7.hierarchylvl8 = organization.organizationpk
    ) AS JBO8
JOIN Organization ON JBO8.hierarchylvl9 = organization.organizationpk

I am not sure if What I am trying to do is allowed in SQL

It looks like you're trying to do the below:

SELECT posid
, actnm
, prntposid
, lngcd
, o0.Name AS H0
, o1.Name AS H1
, o2.Name AS H2
, o3.Name AS H3
, o4.Name AS H4
, o5.Name AS H5
, o6.Name AS H6
, o7.Name AS H7
, o8.Name AS H8
, o9.Name AS H9
FROM Jobposition jp
JOIN Organization o0 ON jp.Hierarchylvl0 = o0.OrganizationPk
JOIN Organization o1 ON jp.Hierarchylvl1 = o1.OrganizationPk
JOIN Organization o2 ON jp.Hierarchylvl2 = o2.OrganizationPk
JOIN Organization o3 ON jp.Hierarchylvl3 = o3.OrganizationPk
JOIN Organization o4 ON jp.Hierarchylvl4 = o4.OrganizationPk
JOIN Organization o5 ON jp.Hierarchylvl5 = o5.OrganizationPk
JOIN Organization o6 ON jp.Hierarchylvl6 = o6.OrganizationPk
JOIN Organization o7 ON jp.Hierarchylvl7 = o7.OrganizationPk
JOIN Organization o8 ON jp.Hierarchylvl8 = o8.OrganizationPk
JOIN Organization o9 ON jp.Hierarchylvl9 = o9.OrganizationPk

Note that if any of the hierarchy fields are nullable, you'll need to change out all those joins to be LEFT JOIN.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM