DUVIDA DELETE UTILIZANDO LEFT JOIN

SQL Server

02/12/2016

Estou tentando realizar um dele utilizando left join para utilizar o parametro data , pois a minha tabela Nativedocument não tem , o select funciona perfeitamente mas quando eu tento utilizar o delete acima retorna o seguinte erro .

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Se eu colocar a palavra exists , ele ignora meu parametro de data e deleta todas as linhas.

delete from NativeDocument where id in(
select a.id, b.idnativedocument
from NativeDocument a
left join DocumentInfo b on a.id = b.idnativedocument
where cast (b.createddate as date) BETWEEN '20161130' and '20161130')
Rodney Pereira

Rodney Pereira

Curtidas 0

Melhor post

Fabio Parreira

Fabio Parreira

02/12/2016

O seu sub-select só deve retornar uma coluna, não duas, ou a.id ou b.idnativedocument.
GOSTEI 1

Mais Respostas

Luiz Santos

Luiz Santos

02/12/2016

Rodney.

Você jamais conseguiria fazer o que você quer com um LEFT JOIN.
Pense assim, com um LEFT, ele listaria todos os campos, mesmo que não exista contrapartida na outra tabela.
Assim você apagaria todos os seus dados.

Para esse caso, obrigatoriamente você tem que usar o INNER JOIN ou seu DELETE não vai funcionar direito

Grande abraço
GOSTEI 1
Rodney Pereira

Rodney Pereira

02/12/2016

Obrigado !!
GOSTEI 0
Rodney Pereira

Rodney Pereira

02/12/2016

Obrigado pela dica!!
GOSTEI 0
David Styveen

David Styveen

02/12/2016

Bom dia, Rodney.

Acredito que a melhor maneira de fazer o delete seria utilizando o EXISTS.

delete from NativeDocument where exists (
select *
from DocumentInfo b
where NativeDocument.id = b.idnativedocument 
  and cast (b.createddate as date) BETWEEN '20161130' and '20161130'
)
GOSTEI 0
POSTAR