我不知道,如何更好地解释:
我需要一个视图(在非常规范化的情况下)将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嵌套连接”无法正常工作
提前致谢
答案 0 :(得分: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
请注意,JOIN
是从左到右执行的(但前面是括号)。因此,你的情况是,连接的顺序是:
{[C -> (A <-> AT)] -> (CAR <-> CART)} -> P
其中<->
(内连接)表示对称关系(仅当两侧都存在时才显示值)和->
(左连接)意味着左边的所有值都将出现,而从右边 - 只有匹配。