Anaamelia 0 Denunciar post Postado Julho 19, 2005 Como faço para descobrir os dados que estão em uma tabela A mas não estão na B, utilizando o Not Exists?Agradecida. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 20, 2005 deve haver algum relacionamente entre elas exemplo SELECT * FROM CLIENTES C WHERE NOT EXISTS (SELECT NULL FROM COMPRAS O WHERE O.CODCLI = C.CODCLI) RETORNA CLIENTES SEM COMPRAS OU SEJA VERIFICA SE A SUBQUERY TEM ALGUM RESULTADO VOCE PODE ATÉ OTIMIZAR ... SELECT * FROM CLIENTES C WHERE NOT EXISTS (SELECT NULL FROM COMPRAS O WHERE O.CODCLI = C.CODCLI AND ROWNUM = 1) BASTA UM REGISTRO POIS SE TESTE A EXISTENCIA OU NAO Compartilhar este post Link para o post Compartilhar em outros sites
MonTiLLa 1 Denunciar post Postado Julho 20, 2005 Ola, Tb existem outras formas de fazer oq você esta querendo... vou mandar 1 a mais... select * from CLIENTES where CODCLI in (SELECT CODCLI FROM CLIENTES minus SELECT CODCLI FROM COMPRAS); Esse mostra clientes sem compras, como o MINUS e mais rapido q o NOT IN so deixei um exemplo com o MINUS mesmo. Ai você ve de acordo com as suas necessidades os campos do SELECT. OBS: Com esse comando MINUS, todos os tipos do campo dos SELECT´s tem que ser iguais, como VARCHAR, CHAR, DATE, etc... espero q ter ajudado. http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
Anaamelia 0 Denunciar post Postado Julho 20, 2005 Eu preciso restringir alguns campos da tabelaC, teria algum problema? deve haver algum relacionamente entre elas exemplo SELECT * FROM CLIENTES C WHERE NOT EXISTS (SELECT NULL FROM COMPRAS O WHERE O.CODCLI = C.CODCLI) RETORNA CLIENTES SEM COMPRAS OU SEJA VERIFICA SE A SUBQUERY TEM ALGUM RESULTADO VOCE PODE ATÉ OTIMIZAR ... SELECT * FROM CLIENTES C WHERE NOT EXISTS (SELECT NULL FROM COMPRAS O WHERE O.CODCLI = C.CODCLI AND ROWNUM = 1) BASTA UM REGISTRO POIS SE TESTE A EXISTENCIA OU NAO <{POST_SNAPBACK}> Compartilhar este post Link para o post Compartilhar em outros sites
Anaamelia 0 Denunciar post Postado Julho 20, 2005 select * from CLIENTES where CODCLI in(SELECT CODCLI FROM CLIENTES minusSELECT CODCLI FROM COMPRAS);Ao utilizar o Minus, está dando a mensagem Too Many Values e eu não xonsigo executar a minha query...As tabelas não possuem os mesmos campos e na 1 tabela eu preciso restringir alguns campos.....Além disso, os campo não são iguais... alguns são varchar na tabela 1 mas são char na tabela 2...Como posso fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 20, 2005 SUPONDO ESTE EXEMPLO QUE DEI ,MAS ... CLIENTES DO RIO E QUE NAO COMPRARAM ACIMA DE 100$ SELECT * FROM CLIENTES C WHERE C.UF = 'RJ' AND NOT EXISTS (SELECT NULL FROM COMPRAS X WHERE X.CODCLI = C.CODCLI AND X.VALOR >= 100) select * from CLIENTES where CODCLI in (SELECT CODCLI FROM CLIENTES minus SELECT distinct CODCLI FROM COMPRAS); deveria funcionar , funcionou até em tabelas parecidas num teste que fiz aqui. se você está em pl-sql o selct só pode retornar 1 linha, senão você deve criar um cursor Compartilhar este post Link para o post Compartilhar em outros sites
Anaamelia 0 Denunciar post Postado Julho 20, 2005 O problema é que os campos não são do mesmo tipo. Ex.: na tabela A o campo nome é varchar2(10) e na tabela B o campo nome é char(10). Eu não consigo usar o Minus dessa forma... Ana. SUPONDO ESTE EXEMPLO QUE DEI ,MAS ... CLIENTES DO RIO E QUE NAO COMPRARAM ACIMA DE 100$ SELECT *FROM CLIENTES CWHERE C.UF = 'RJ'AND NOT EXISTS (SELECT NULL FROM COMPRAS X WHERE X.CODCLI = C.CODCLI AND X.VALOR >= 100) select * from CLIENTES where CODCLI in (SELECT CODCLI FROM CLIENTES minus SELECT distinct CODCLI FROM COMPRAS);deveria funcionar , funcionou até em tabelas parecidas num teste que fiz aqui.se você está em pl-sql o selct só pode retornar 1 linha, senão você deve criar um cursor <{POST_SNAPBACK}> Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 20, 2005 agora é bico ... tente um lpad no varchar2 ... lpad(nome,10,' ') ..../ Compartilhar este post Link para o post Compartilhar em outros sites
MonTiLLa 1 Denunciar post Postado Julho 21, 2005 Ana, Manda a descricao de suas tabelas ai, juntamente com seus tipos e manda os campos que você esta querendo listar, pra agente te mandar uma coisa mais clara, ok? http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
Anaamelia 0 Denunciar post Postado Julho 21, 2005 Montilla,Segue abaixo o solicitado:TabelaA campoA NOT NULL DATE campoB CHAR(2) campoC NOT NULL CHAR(12) campoD NOT NULL DATE campoE NOT NULL NUMBER(2) campoF NOT NULL VARCHAR2(50) campoG NOT NULL CHAR(2) campoH NOT NULL NUMBER(2) campoI NOT NULL NUMBER(5)Tabela B campoA NOT NULL DATE campoB NOT NULL CHAR(2) campoC NOT NULL CHAR(12) campoD NOT NULL DATE campoE NOT NULL NUMBER(5) campoF NOT NULL CHAR(16) campoG NOT NULL CHAR(2) campoH NOT NULL NUMBER(5) campoI NOT NULL NUMBER(5)Preciso buscar os dados que estão na tabela A e que não estão na tabela B.Estamos fazendo da seguinte forma:select campoC from tabelaAwhere campoG<>'01' and campoE <> 20 AND NOT (campoG <> '04' and campoE = 99) and trunc(campoD) >= to_date('31/05/2005 00:00:00','DD-MM-YYYY HH24:MI:SS') and trunc(campoD) <= to_date('31/05/2005 23:59:59','DD-MM-YYYY HH24:MI:SS') and campoC in (select campoC from tabelaAminusselect campoC from TabelaB@instancia)Campos que se relacionam: A.campoC = B.campoC A.campoF = B.campoF A.campoG = B.campoG A.campoD = B.campoD A.campoA = B.campoAObrigada. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 22, 2005 parece estar correto. tabela a tem mais campos que a tabela b ? tabela b tem mais de uma ocorrencia do campo c ? quais as chaves ? tente select distinct campoC from tabelaA where campoG<>'01' and campoE <> 20 AND NOT (campoG <> '04' and campoE = 99) and trunc(campoD) >= to_date('31/05/2005 00:00:00','DD-MM-YYYY HH24:MI:SS') and trunc(campoD) <= to_date('31/05/2005 23:59:59','DD-MM-YYYY HH24:MI:SS') minus select distinct campoC from TabelaB@instancia) Compartilhar este post Link para o post Compartilhar em outros sites
MonTiLLa 1 Denunciar post Postado Julho 22, 2005 Ana, Tenta fazer o seguinte, lista tudo que existe igual nas 2 tabelas, vou te mandar o comando, ai você verifica se nao existem dados iguais mesmo ou se e pq existem alguma problema na SQL, ai você manda pra agente resolver. Ai vai: select campoC from tabelaA where campoG<>'01' and campoE <> 20 AND NOT (campoG <> '04' and campoE = 99) and trunc(campoD) >= to_date('31/05/2005 00:00:00','DD-MM-YYYY HH24:MI:SS') and trunc(campoD) <= to_date('31/05/2005 23:59:59','DD-MM-YYYY H24:MI:SS') INTERSECT select campoC from TabelaB@instancia; Tow esperando http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Compartilhar este post Link para o post Compartilhar em outros sites