提问人:am2 提问时间:7/4/2017 最后编辑:Dimgoldam2 更新时间:7/5/2017 访问量:1470
Oracle-SQL:合并 LEFT 和 INNER JOIN
Oracle- SQL: combine LEFT and INNER JOIN
问:
我不知道,如何更好地解释:
我需要一个视图(在一个非常规范化的事情中),将 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 嵌套联接”不起作用
提前致谢
答:
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
感谢您的快速回答,它工作正常。有时事情比预期的更容易理解......
评论