Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Filipe Medeiros Muniz

Left join no Oracle 8i

Recommended Posts

Caros boa tarde estou com a seguinte duvida estou realizando uma query que retornar todos registro de tabela,colunas,constraints do oracle até ai tudo bem.

Mas preciso retorna dos registros independente da ligação ou seja preciso utilizar um left join minha versão de Oracle e 8i pesquise na web e achei que nessa versão ainda não existia o padrão ANSI ou seja não podemos utilizar left join ou right join mais sim “(+)”.

Onde estou errando não conseguir encontrar o local certo para colocar essa comando para simular o left join na minha query, a mesma segue abaixo desde já muito obrigado a todos.

 

 

SELECT

p.constraint_name as PK

,p.table_name as TABLE_NAME

,pcc.column_name as COLUMN_NAME

,ptc.data_type as DATA_TYPE

,ptc.data_length as DATA_LENGTH

,c.constraint_name as FK

,c.table_name as TABLE_NAME2

,ctc.column_name as COLUMN_NAME2

,ctc.data_type as DATA_TYPE2

,ctc.data_length as DATA_LENGTH2

FROM

all_tab_columns ptc

,all_tab_columns ctc

,all_cons_columns pcc

,all_cons_columns ccc

,all_constraints p

,all_constraints c

WHERE

c.owner = 'SGB'

and p.constraint_name = c.r_constraint_name

and p.owner = c.r_owner

and ccc.owner = c.owner

and ccc.constraint_name = c.constraint_name

and ctc.owner = c.owner

and ctc.table_name = ccc.table_name

and ctc.column_name = ccc.column_name

and pcc.owner = c.r_owner

and pcc.constraint_name = p.constraint_name

and ptc.owner = c.r_owner

and ptc.table_name = pcc.table_name

and ptc.column_name = pcc.column_name;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta um (+) na coluna que se quer outijoinhar

 

Usuários que tenham posts ou não.

 

select *
from usuarios , posts
where usuarios.user = post.user (+)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eh da para usar o (+) tbm para left join,

so meio complicado, pelo menos ficou para mim...rs

mas acho que assim ja ajuda:

 

SQL> select p.part_id, s.supplier_name

2 from part p, supplier s

3 where p.supplier_id = s.supplier_id (+);

 

PART SUPPLIER_NAME

---- --------------------

P1 Supplier#1

P2 Supplier#2

P3

P4

 

e

 

SQL> select p.part_id, s.supplier_name

2 from part p, supplier s

3 where p.supplier_id (+) = s.supplier_id;

 

PART SUPPLIER_NAME

---- --------------------

P1 Supplier#1

P2 Supplier#2

Supplier#3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente partir de all_tab_columns ptc e montar os outers na constraints.

 

Mas não creio que será fácil pois seriam muitas condições de outer

 

colunas sem constrains

pk sem fk

ou seja seis tabelas.

 

Talvez mais queries e menos joins resolva esta questão.

 

Lembre que existem vários programas que monstram isto de forma visual (SqlDeveloper por exemplo).

 

Dá uma lida nestes dois links todavia, parece ir na mesma linha

 

http://www.dbforums.com/oracle/813513-how-retrieve-foreign-key-information-oracle.html

 

http://database.itags.org/oracle/191456/

 

base http://www.google.com.br/search?q=all_tab_columns+all_cons_columns+all_constraints%09%28%2B%29&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a

Compartilhar este post


Link para o post
Compartilhar em outros sites

Filipe, boa noite,

 

Veja se o exemplo abaixo ajuda

 

SELECT

p.constraint_name AS PK

,ptc.table_name AS TABLE_NAME

,ptc.column_name AS COLUMN_NAME

,ptc.data_type AS DATA_TYPE

,ptc.data_length AS DATA_LENGTH

,c.constraint_name AS FK

,c.table_name AS TABLE_NAME2

,ctc.column_name AS COLUMN_NAME2

,ctc.data_type AS DATA_TYPE2

,ctc.data_length AS DATA_LENGTH2

FROM

all_tab_columns ptc

,all_tab_columns ctc

,all_cons_columns pcc

,all_cons_columns ccc

,all_constraints p

,all_constraints c

WHERE

ptc.owner = 'SGB'

AND ptc.column_name = ctc.column_name

AND ptc.table_name = ctc.table_name

AND ptc.owner = ctc.owner

AND ptc.column_name = pcc.column_name(+)

AND ptc.table_name = pcc.table_name(+)

AND ptc.owner = pcc.owner(+)

AND pcc.constraint_name = p.constraint_name(+)

AND pcc.table_name = p.table_name(+)

AND pcc.owner = p.owner(+)

AND NVL(p.constraint_type,'P')='P'

AND ctc.column_name = ccc.column_name(+)

AND ctc.table_name = ccc.table_name(+)

AND ctc.owner = ccc.owner(+)

AND ccc.constraint_name = c.r_constraint_name(+)

AND ccc.owner = c.r_owner(+)

AND NVL(c.constraint_type,'R')='R'

GROUP BY

p.constraint_name

,ptc.table_name

,ptc.column_name

,ptc.data_type

,ptc.data_length

,c.constraint_name

,c.table_name

,ctc.column_name

,ctc.data_type

,ctc.data_length

ORDER BY

ptc.table_name,

ptc.column_name

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.