Jump to content
MMarques

Comparar Tabelas

Recommended Posts

MMarques

Olá, tenho uma base de dados e quando quero importar novos dados, importo para uma tabela para comparar os dados dessa tabela nova com os dados existentes na base de dados. O que eu queria agora era uma maneira para ela me avisar que por exemplo, se um dos campos tiver o valor avariado e o da tabela nova disser instalado, ou se na base de dados disser recolhido e na tabela nova disser novo, ele dar-me um erro. Será possível?

Share this post


Link to post
Share on other sites
migueldesousa

primeiro que base de dados utilizas??

segundo... o que é um valor avariado???

ou isso sao valores??? "avariado" "novo" "recolhido"


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Peço desculpa por não ter especificado, a base de dados que uso é o access, os valores avariado, novo e recolhido são atributos de um campo, a tabela tem os seguintes campos:

Serial, Cliente, Estado e Data

Esses atributos estão associados ao campo Estado.

EDIT:

Mais ou menos o pretendido seria algo do género uma query que me mostra todos os campos que tenho no ficheiro que vou importar e apenas os campos que existem em ambas as tabelas. Seguindo o Serial. Isto já está implementado e a funcionar agora o pretendido seria adicionar um campo a essa querry que me dissesse algo segundo aquelas condições anteriores.

Share this post


Link to post
Share on other sites
migueldesousa

tao na tabela temporaria que fazes metes mais um campo e quando fazes o select fazes um case


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

algo do género

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

isto mostra-me a tabela toda que importei (temporaria) e os respectivos registos que estão na tabela da base de dados.

Share this post


Link to post
Share on other sites
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data, case .... as nomeDoCampo

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Não estou a entender muito bem a sintaxe, visto que provavelmente ainda vou precisar de vários Cases.

Serial algo assim deste género mas dá-me erro

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

Aviso = CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Diz-me que falta um operador na expressão.

Aviso = CASE DecoEstado.Serial

Share this post


Link to post
Share on other sites
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END) as Aviso,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;


áááá caralhassssssss

Share this post


Link to post
Share on other sites
migueldesousa

pera que agora e qe li melhor

tu queres mudar a serial tambem ?


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Ups, enganei-me ai, era para ser Estado em vez de Serial. Mas continua a dar o mesmo erro.

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Estado = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Estado = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Share this post


Link to post
Share on other sites
migueldesousa

troca os = por like e mete ' nos textos


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Continuo a ter o mesmo erro do missing operator

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado <>' Instalado' OR Compara.Estado <> 'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado <> 'Recolha' OR Compara.Estado <> 'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado <> 'Novo' OR Compara.Estado <> 'Instalado' OR Compara.Estado <> 'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Share this post


Link to post
Share on other sites
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Sim é uma tabela, mas eu não tenho de por Tabela.Campo? ou tenho de por Campo FROM Tabela?

Share this post


Link to post
Share on other sites
migueldesousa

tens é uns nomes esquesitos nas tabelas ....

bem eu nao sei, tira as ()


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

Ja tinha esperimentado tirar os parentesis, não faço a minima ideia como fazer isto lol

Share this post


Link to post
Share on other sites
migueldesousa

tenta assim

se nao der n te sei como ajudar... ao menos que de outro erro...

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;


áááá caralhassssssss

Share this post


Link to post
Share on other sites
MMarques

continua a dar o mesmo erro e sublinha-se o WHEN agora lol tá bonito isto tá

Share this post


Link to post
Share on other sites
migueldesousa

faz tudo outra vez... mas uma coisa de cada vez ... começa a fazer coisas simples por exemplo so com uma tabela

select * , (case when estado like 'instalado' then 'kkcoisa' else 'outra coisa' end ) as aviso from DecoEstado


áááá caralhassssssss

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.