Oracle case语句中的外部联接
我有以下疑问:Oracle case语句中的外部联接,oracle,outer-join,Oracle,Outer Join,我有以下疑问: SELECT U.NAME , U.TYPE , U.REFERENCED_NAME , U.REFERENCED_TYPE, CASE WHEN U.REFERENCED_TYPE= 'TABLE' and A.TABLE_NAME= U.REFERENCED_NAME THEN 'TABLE EXISTS' WHEN U.REFERENCED_TYPE= 'PROCEDURE' and A.TABLE_NAME= U.REFERENCED_NAME THEN
SELECT U.NAME , U.TYPE , U.REFERENCED_NAME , U.REFERENCED_TYPE,
CASE
WHEN U.REFERENCED_TYPE= 'TABLE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'TABLE EXISTS'
WHEN U.REFERENCED_TYPE= 'PROCEDURE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'PROCEDURE EXISTS'
END
FROM USER_DEPENDENCIES U , user_tables a
WHERE U.name ='RANDOM_PROCEDURE_NAME' and U.REFERENCED_NAME = A.TABLE_NAME;
我在这个查询中遇到的问题是:U.REFERENCED_NAME=A.TABLE_NAME这样的连接只给了我特定的条件。我想在TABLE USER_DEPENDENCIES中知道存在的表,即使它不存在于TABLE USER_tables A中。我想包括一个外部连接,但我不能这样做。有人能帮我吗?像这样的吗?
SELECT
U.NAME,
U.TYPE,
U.REFERENCED_NAME,
U.REFERENCED_TYPE,
CASE
WHEN U.REFERENCED_TYPE = 'TABLE'
AND A.TABLE_NAME = U.REFERENCED_NAME
THEN
'TABLE EXISTS'
WHEN U.REFERENCED_TYPE = 'PROCEDURE'
AND A.TABLE_NAME = U.REFERENCED_NAME
THEN
'PROCEDURE EXISTS'
ELSE
'NOT DEFINED'
END
TYPE_1
FROM
USER_DEPENDENCIES U,
USER_TABLES A
WHERE
U.NAME LIKE '%TEST%'
AND U.REFERENCED_NAME = A.TABLE_NAME(+)
像这样的吗?
SELECT
U.NAME,
U.TYPE,
U.REFERENCED_NAME,
U.REFERENCED_TYPE,
CASE
WHEN U.REFERENCED_TYPE = 'TABLE'
AND A.TABLE_NAME = U.REFERENCED_NAME
THEN
'TABLE EXISTS'
WHEN U.REFERENCED_TYPE = 'PROCEDURE'
AND A.TABLE_NAME = U.REFERENCED_NAME
THEN
'PROCEDURE EXISTS'
ELSE
'NOT DEFINED'
END
TYPE_1
FROM
USER_DEPENDENCIES U,
USER_TABLES A
WHERE
U.NAME LIKE '%TEST%'
AND U.REFERENCED_NAME = A.TABLE_NAME(+)
使用
外部联接
:
FROM
USER_DEPENDENCIES u
LEFT OUTER JOIN
user_tables a
ON u.REFERENCED_NAME = a.TABLE_NAME
WHERE
u.name ='RANDOM_PROCEDURE_NAME' ;
(左)表
USER\u DEPENDENCIES
中的所有行,无论它们在USER\u表中是否有匹配的行。使用外部联接
:
FROM
USER_DEPENDENCIES u
LEFT OUTER JOIN
user_tables a
ON u.REFERENCED_NAME = a.TABLE_NAME
WHERE
u.name ='RANDOM_PROCEDURE_NAME' ;
(左)表USER\u DEPENDENCIES
中的所有行,无论它们在USER\u表中是否有匹配的行。这将提供对对象的所有依赖关系。对于表和过程,它显示了数据库架构中存在的表和过程:
select dep.name , dep.type , dep.referenced_name , dep.referenced_type,
case
when dep.referenced_type = 'TABLE' and tab.table_name is not null then
'TABLE EXISTS'
when dep.referenced_type = 'PROCEDURE' and pro.procedure_name is not null then
'PROCEDURE EXISTS'
end as lookup
from user_dependencies dep
left outer join user_tables tab on (dep.referenced_type = 'TABLE' and tab.table_name = dep.referenced_name)
left outer join user_procedures pro on (dep.referenced_type = 'PROCEDURE' and pro.procedure_name = dep.referenced_name)
where dep.name ='RANDOM_PROCEDURE_NAME';
这将提供对对象的所有依赖关系。对于表和过程,它显示了数据库架构中存在的表和过程:
select dep.name , dep.type , dep.referenced_name , dep.referenced_type,
case
when dep.referenced_type = 'TABLE' and tab.table_name is not null then
'TABLE EXISTS'
when dep.referenced_type = 'PROCEDURE' and pro.procedure_name is not null then
'PROCEDURE EXISTS'
end as lookup
from user_dependencies dep
left outer join user_tables tab on (dep.referenced_type = 'TABLE' and tab.table_name = dep.referenced_name)
left outer join user_procedures pro on (dep.referenced_type = 'PROCEDURE' and pro.procedure_name = dep.referenced_name)
where dep.name ='RANDOM_PROCEDURE_NAME';
请使用左外联接
而不是内联接
。将查询中的替换为,如下所示:
SELECT U.NAME , U.TYPE , U.REFERENCED_NAME , U.REFERENCED_TYPE,
CASE
WHEN U.REFERENCED_TYPE= 'TABLE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'TABLE EXISTS'
WHEN U.REFERENCED_TYPE= 'PROCEDURE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'PROCEDURE EXISTS'
END
FROM USER_DEPENDENCIES U
LEFT JOIN user_tables a
ON U.name ='RANDOM_PROCEDURE_NAME' and U.REFERENCED_NAME = A.TABLE_NAME;
希望这对你有帮助。谢谢。:) 请使用左外连接
而不是内连接
。将查询中的替换为,如下所示:
SELECT U.NAME , U.TYPE , U.REFERENCED_NAME , U.REFERENCED_TYPE,
CASE
WHEN U.REFERENCED_TYPE= 'TABLE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'TABLE EXISTS'
WHEN U.REFERENCED_TYPE= 'PROCEDURE' and A.TABLE_NAME= U.REFERENCED_NAME
THEN 'PROCEDURE EXISTS'
END
FROM USER_DEPENDENCIES U
LEFT JOIN user_tables a
ON U.name ='RANDOM_PROCEDURE_NAME' and U.REFERENCED_NAME = A.TABLE_NAME;
希望这对你有帮助。谢谢。:) 你说的是左外联接吗?那么你想要所有的用户依赖项(引用表、过程、触发器等等)?对于那些引用表或过程的用户,您想知道user_表中是否存在与引用的表或过程同名的表?您正在寻找与所有_表中的表同名的过程?请澄清。你是说左外联接吗?那么你想要所有的用户依赖项(引用表、过程、触发器等等)?对于那些引用表或过程的用户,您想知道user_表中是否存在与引用的表或过程同名的表?您正在寻找与所有_表中的表同名的过程?请澄清。@Moudiz更新查询。。。现在查看RealSpirituals请给我一份文档,或者你可以向我解释我们什么时候使用(+)或(-)?没有(-)只有(+)阅读:这里面有更多链接外部联接的(+)
语法很旧并且有限制。Oracle本身建议使用JOIN
语法。请参阅@ypercube refere my commented link.@Moudiz更新查询。。。现在查看RealSpirituals请给我一份文档,或者你可以向我解释我们什么时候使用(+)或(-)?没有(-)只有(+)阅读:这里面有更多链接外部联接的(+)
语法很旧并且有限制。Oracle本身建议使用JOIN
语法。请参阅@ypercube引用我的评论链接。此查询对我更有效:)此查询对我更有效:)这对jerry thanx you很有帮助jerry thanx you很有帮助