jMarcel
#1
Pessoal,
como faço para apagar linhas de 1 tabela conforme abaixo:
Quro excluir da tabela A:
Prefixo Cod Data
1234 131 2012-06-01
4321 105 2012-06-01
1234 069 2012-05-01
9876 085 2012-06-01
9999 111 2012-06-01
9999 111 2012-07-01
8888 222 2012-08-01
8888 222 2012-06-01
7777 333 2012-06-01
7777 333 2012-07-01
6666 444 2012-06-01
6666 444 2012-05-01
Todas as linhas que não possuem o conteúdo da tabela B:
Prefixo Cod Data
9999 111 2012-06-01
8888 222 2012-08-01
7777 333 2012-06-01
6666 444 2012-06-01
Ou seja, o resultado final deverá ser uma tabela C:
Prefixo Cod Data
9999 111 2012-06-01
8888 222 2012-08-01
7777 333 2012-06-01
6666 444 2012-06-01
Alguém sabe montar essa query?
DELETE
FROM A a
WHERE
a.prefixo NOT IN
(SELECT b.prefixo FROM B b)
Não funciona?
acho que vai mais além…
delete from A
where not exists (select 1
from B
where B.prefixo = A.prefixo
and B.cod = A.cod
and B.data = A.data)
Se o campo data for timestamp e estiver armazenando hora, minuto e segundo além do dia mês e ano pode ser que precise truncar
[quote=drsmachado]
DELETE
FROM A a
WHERE
a.prefixo NOT IN
(SELECT b.prefixo FROM B b)
Não funciona?[/quote]
Dessa forma você iria excluir todas as ocorrências do prefixo em questão. Note que são 3 critérios a serem analisados.
Eu pensei em:
Mas não deu certo e já sei o porquê…
[quote=ADEMILTON]acho que vai mais além…
delete from A
where not exists (select 1
from B
where B.prefixo = A.prefixo
and B.cod = A.cod
and B.data = A.data)
Se o campo data for timestamp e estiver armazenando hora, minuto e segundo além do dia mês e ano pode ser que precise truncar[/quote]
ADEMILTON,
É exatamente isso.
Muito obrigado mesmo!