Oracle-SQL:合并 LEFT 和 INNER JOIN

Oracle- SQL: combine LEFT and INNER JOIN

提问人:am2 提问时间:7/4/2017 最后编辑:Dimgoldam2 更新时间:7/5/2017 访问量:1470

问:

我不知道,如何更好地解释:

我需要一个视图(在一个非常规范化的事情中),将 ID 扩展到相应的名称,因此我需要在以下事项中将左连接与内部连接结合起来(参见示例)

表:

TCUSTOMER
ID|     NAME|   ANIMAL| CAR|    PROFESSION
 1|  Sheldon|         |    |    1
 2|  Leonard|         |   1|    1
 3| Howard  |         |   2|    2
 4| Radshesh|        1|    |    1
 5| Penny   |         |   3|    

TANIMAL     
ID|     NAME|   TYPE
 1| CINNAMON|   1

TANIMALTYPE 
ID| NAME
 1| DOG

ID|     NAME|   TYPE
 1| CAL-0123|   1
 2| CAL-2345|   1
 3| CAL-4567|   2

TCARTYPE    
ID| NAME
 1| FORD
 2| BMW

TPROFESSION 
1|  PHYSICIAN
2|  ENGINEER

我需要一个具有以下结果的视图:

VCUSTOMER                       
ID|    NAME|ANIMALNAME| ANIMALTYPE| CARNAME|CARTYPE|    PROFESSIONNAME
 1| Sheldon|          |           |        |       |    PHYSICIAN
 2| Leonard|          |           |CAL-0123|   FORD|    PHYSICIAN
 3|  Howard|          |           |CAL-2345|   FORD|    ENGINEER
 4|Radshesh|  CINNAMON|        DOG|        |       |    PHYSICIAN
 5|   Penny|          |           |CAL-4567|    BMW|    

我想我需要类似的东西

SELECT  
    C.ID, C.NAME,
    A.NAME, AT.NAME,
    CAR.NAME, CART.NAME,
    P.NAME
FROM TCUSTOMER C    
LEFT (JOIN TANIMAL A INNER JOIN TANIMALTYPE AT ON A.TYPE = AT.ID) ON A.ID = C.ANIMAL    
LEFT (JOIN TCAR CAR INNER JOIN TCARTYPE CART ON CAR.TYPE = CARTT.ID) ON CAR.ID = C.CAR  
LEFT JOIN TPROFESSION P ON P.ID = C.PROFESSION  

如何执行此操作或我需要搜索什么?“Oracle 嵌套联接”不起作用

提前致谢

SQL Oracle 左联接

评论

0赞 am2 7/5/2017
谢谢你的美化文字。

答:

3赞 Dimgold 7/4/2017 #1

你几乎做对了 - 它只是多个连接。

将关键字放在括号外:JOIN

SELECT  
    C.ID, C.NAME,
    A.NAME, AT.NAME,
    CAR.NAME, CART.NAME,
    P.NAME
FROM TCUSTOMER C    
LEFT JOIN (TANIMAL A INNER JOIN TANIMALTYPE AT ON A.TYPE = AT.ID) ON A.ID = C.ANIMAL    
LEFT JOIN (TCAR CAR INNER JOIN TCARTYPE CART ON CAR.TYPE = CART.ID) ON CAR.ID = C.CAR  
LEFT JOIN TPROFESSION P ON P.ID = C.PROFESSION 

请注意,s 是从左到右执行的(但前面有括号)。因此,根据您的情况,连接的顺序将是:JOIN

{[C -> (A <-> AT)] -> (CAR <-> CART)} -> P

其中(内部连接)表示对称关系(仅当两侧都存在时才会显示值),(左连接)表示将出现从左边开始的所有值,而从右边开始 - 仅显示匹配。<->->

评论

1赞 am2 7/4/2017
感谢您的快速回答,它工作正常。有时事情比预期的更容易理解......