Oracle-SQL:合并左联接和内联接
我不知道如何更好地解释: 我需要一个视图(在一个非常规范化的问题中)将ID扩展到相应的名称,以便在下面的问题中结合f.e.左连接和内部连接(参见示例) 表: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|
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
其中,
(内部连接)表示对称关系(仅当两侧都存在时,值才会显示),而->
(左连接)表示将显示左侧的所有值,而右侧的值仅显示匹配值。感谢您的快速回答,它工作正常。有时候事情比预期的更容易理解…谢谢你美化的文字。