Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 503953
            [titulo] => comparação e seleção de informações em tabelas 
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-12-10 08:28:18
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 400826
            [status] => A
            [isExample] => 
            [NomeUsuario] => Gisele Fagundes
            [Apelido] => GiFagundes
            [Foto] => 
            [Conteudo] => Para selecionar os itens que tem em movdetalhe e nao tem em movcaixa
select * from movdetalhe where not exists (select * from movcaixa where movcaixa.idmovcaixa = movdetalhe.idmovcaixa and movcaixa.idfilial = movdetalhe.idfilial)

Verifique se a consulta deu certo. Se estiver ok é só trocar o "select * " por delete, assim:
delete from movdetalhe where not exists (select * from movcaixa where movcaixa.idmovcaixa = movdetalhe.idmovcaixa and movcaixa.idfilial = movdetalhe.idfilial) ) )

comparação e seleção de informações em tabelas

Vanilson
   - 03 dez 2014

olá galera bom dia.
sou novo na área e estou tendo algumas dificuldades aqui.
Estou precisando selecionar as informações que contem em uma tabela e não contem na outra por exemplo :
na tabela "movdetalhe" contem uma coluna chamada idmovcaixa e idfilial.
em outra tabela chamada "movcaixa" contem as mesmas colunas.
porem preciso que as informações contidas nas duas colunas sejam iguais tipo se na movdetalhe a coluna tem idmovcaixa =15 e idfilial =1 na movcaixa deve também conter idmovcaixa= 15 e idfilial = 1.
o meu problema é que a tabela movdetalhe não contem todos os campos que existem na tabela movcaixa eu quero selecionar esses campos da movcaixa e deleta - los para que as duas tabelas fiquem iguais.
se alguém puder me ajudar fico muito grato.
desde já agradeço a ajuda de todos.

Post mais votado

Gifagundes
   - 10 dez 2014

Para selecionar os itens que tem em movdetalhe e nao tem em movcaixa
select * from movdetalhe where not exists (select * from movcaixa where movcaixa.idmovcaixa = movdetalhe.idmovcaixa and movcaixa.idfilial = movdetalhe.idfilial)

Verifique se a consulta deu certo. Se estiver ok é só trocar o "select * " por delete, assim:
delete from movdetalhe where not exists (select * from movcaixa where movcaixa.idmovcaixa = movdetalhe.idmovcaixa and movcaixa.idfilial = movdetalhe.idfilial)

Vanilson
   - 10 dez 2014

Olá Gisele bom dia, muito obrigado pela ajuda.
Porém venho informar que não deu certo ainda, pois o script que você me passou selecionou apenas os itens contidos nas duas tabelas. Fiz algumas alterações que segue adiante:

select * from movcaixa where not exists (select * from movcaixadetalhe where movcaixadetalhe.idmovcaixa != movcaixa.idmovcaixa and movcaixadetalhe.idfilial = movcaixa.idfilial);

Obs.: essa ai é estrutura real das tabelas, a que eu havia passado na pergunta era apenas um exemplo.

tentei esse aqui também:

select * from movcaixadetalhe where not exists (select * from movcaixa where movcaixa.idmovcaixa != movcaixadetalhe.idmovcaixa and movcaixa.idfilial = movcaixadetalhe.idfilial);

mais este:

select movcaixa.idmovcaixa, movcaixa.idfilial
from movcaixa

left join movcaixadetalhe on movcaixadetalhe.idmovcaixa != movcaixa.idmovcaixa and movcaixadetalhe.idfilial != movcaixa.idfilial

where
movcaixadetalhe is null;

mais todos me trazem apenas as informações que constam nas duas tabelas.

eu preciso somente delecionar dos que constam na tabela movcaixadetalhe e não constam na movcaixa. Se você souber outra forma me informe pois na net aqui so encontro as mesmas coisas.

Desde já agradeço a colaboração. Obrigado.

Gifagundes
   - 10 dez 2014

Boa tarde Vanilson,
no comando mandamos o banco selecionar todos os registros de movdetalhe - select * from movcaixadetalhe - que é a tabela com os registro que você deseja certo?

Em seguida no where mandamos filtrar todos os itens que tenham nesta tabela mas que não tenha na tabela movcaixa um registro com o mesmo valor - where not exists (select * from movcaixa where movcaixa.idmovcaixa = movdetalhe.idmovcaixa and movcaixa.idfilial = movdetalhe.idfilial)

Conforme o que você passou o comando seria esse ai mesmo, uma outra forma que talvez fique mais fácil para você conferir é a seguinte:

select
movcaixadetalhe.idmovcaixa as 'ID MovDetalhe', movcaixa.idfilial as 'ID MovCaixa'
from movcaixadetalhe
left join movcaixa on (movcaixa.idmovcaixa = movcaixadetalhe.idmovcaixa and movcaixa.idfilial = movcaixadetalhe.idfilial)
where
movcaixa.idmovcaixa = '' or movcaixa.idmovcaixa is null

Você vai ver que só vai aparecer os itens do movcaixadetalhe que não tem correspondente no movcaixa

Vanilson
   - 10 dez 2014

Ainda assim deu a mesma coisa. Desculpe mais parece que eu me me omiti de dar algumas informações você conhece um programa chamado "data comparer for PostgreSQL" ? Eu utilizava esse app para comparar as informações das tabelas aqui porém nesse bendito banco ele deu um erro e não consegue acessar as informações não sei se é por conta da licença embora ainda esteja dentro do período de avaliação ele dar uma mensagem que as tabelas não são compatíveis mesmo todos os bancos possuindo a mesma arquitetura. Só que acho que isso que esta acontecendo não tem nada a ver, pois os script que estão sendo executados é apenas para selecionar as informações.

Certo esse ultimo script que você me passou selecionou apenas o que constava em ambas as tabelas.