在oracle中一步步加入订单

join order step by step in oracle

我在下面遇到问题 query.I 想逐步加入列。 例如 a.code 首先 b.name1 如果不匹配然后加入 name2 etc.But 我无法处理查询。

SELECT * FROM TABLE A 
LEFT JOIN TABLE B 
 ON A.CODE = B.NAME1
 OR A.CODE = B.NAME2
 OR UPPER(B.NAME3) = UPPER(A.NAME)

谢谢

编辑 下面的示例, 如果 TABLEB.CODE = TABLEA.NAME1 匹配,则不想查看或 TABLEB.CODE = TABLEA.NAME2。 如果不匹配任何 TABLEB.CODE = TABLEA.NAME1 则逐步匹配该顺序的列。

 WITH TABLEA AS (SELECT 13445  AS ID,'A'  AS  TYPE,'DFSF' AS NAME1 ,  'PCK' AS NAME2 FROM DUAL
                 UNION ALL 
                SELECT 13445  AS ID,'A'  AS  TYPE,'PCK' AS NAME1 ,  'PCK' AS NAME2 FROM DUAL),

      TABLEB AS (SELECT 56544  AS ID, 'PCK' AS  CODE,     'PCK' AS  FRST_NM FROM DUAL)
 SELECT * FROM TABLEA 
 LEFT JOIN TABLEB 
 ON TABLEB.CODE = TABLEA.NAME1
 OR TABLEB.CODE = TABLEA.NAME2
 OR UPPER(TABLEB.FRST_NM) = UPPER(TABLEA.NAME2)

我相信您的查询会如您所愿。如果您已经提到 OR,则加入条件中没有 step by step。因此,如果任一条件匹配,则行将匹配。因此,如果 A.CODE <> B.NAME1A.CODE = B.NAME2,它们将匹配。如果两者都为真,那么它们也将匹配。我使用示例数据创建了一个 CTE 以查看输出。它将 return 3 行用于 3 场比赛。

    WITH TBL(SEQ,CODE,NAME,NAME1,NAME2,NAME3)  AS
    (
       SELECT 1,'A1','B','A1','D','E' FROM DUAL UNION ALL -- as A.CODE(A1)=B.NAME1, it will match
       SELECT 2, 'B2','B','D','B2','F' FROM DUAL UNION ALL --as A.CODE (B2) <> B.NAME1 , it will match for B.NAME2
       SELECT 3, 'G','H1','D','A','H1' FROM DUAL UNION ALL --match for UPPER(B.NAME3) = UPPER(A.NAME)
       SELECT 4,'P4','Q4','R4','S4','T4' FROM DUAL
    )
    SELECT * FROM TBL A 
    LEFT JOIN TBL B 
    ON (A.CODE = B.NAME1
      OR A.CODE = B.NAME2
      OR UPPER(B.NAME3) = UPPER(A.NAME)
        )

列 SEQ 只是为了查看哪些行 returning。

输出

+-----+------+------+-------+-------+-------+-------+--------+--------+---------+---------+---------+
| SEQ | CODE | NAME | NAME1 | NAME2 | NAME3 | SEQ_1 | CODE_1 | NAME_1 | NAME1_1 | NAME2_1 | NAME3_1 |
+-----+------+------+-------+-------+-------+-------+--------+--------+---------+---------+---------+
|   1 | A1   | B    | A1    | D     | E     |     1 | A1     | B      | A1      | D       | E       |
|   2 | B2   | B    | D     | B2    | F     |     2 | B2     | B      | D       | B2      | F       |
|   3 | G    | H1   | D     | A     | H1    |     3 | G      | H1     | D       | A       | H1      |
|   4 | P4   | Q4   | R4    | S4    | T4    |       |        |        |         |         |         |
+-----+------+------+-------+-------+-------+-------+--------+--------+---------+---------+---------+