Oracle-SQL:合并左联接和内联接

Oracle-SQL:合并左联接和内联接,sql,oracle,join,left-join,Sql,Oracle,Join,Left Join,我不知道如何更好地解释: 我需要一个视图(在一个非常规范化的问题中)将ID扩展到相应的名称,以便在下面的问题中结合f.e.左连接和内部连接(参见示例) 表: TCUSTOMER ID| NAME| ANIMAL| CAR| PROFESSION 1| Sheldon| | | 1 2| Leonard| | 1| 1 3| Howard | | 2| 2 4| Radshesh|

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

我需要一个视图(在一个非常规范化的问题中)将ID扩展到相应的名称,以便在下面的问题中结合f.e.左连接和内部连接(参见示例)

表:

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嵌套联接”不起作用


提前感谢

您几乎做对了-这只是多个连接

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 
请注意,
JOIN
s是从左到右执行的(但前面有括号)。因此,在您的情况下,联接顺序为:

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

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

感谢您的快速回答,它工作正常。有时候事情比预期的更容易理解…谢谢你美化的文字。