Comparação
Boa tarde,
Galera, poderiam me ajudar a resolver um problema que já me acompanha a algum tempo?
Tenho duas tabelas com campos de valores. Uma das tabelas possui valores positivos e a outra negativos.
Em alguns casos, a tabela que possui valores positivos, possui mais registros com mesmo valor da tabela de valores negativos.
A minha dúvida é como faço para que o sistema exclua a mesma quantidade de registros na tabela de valores negativos na de positivo.
Ex:
tabela A(valores positivos)
ID Valor
1 12,30
2 12,30
3 14,00
tabela B(valores negativos)
id valor1
1 -0,90
2 -34,00
3 -12,30
Reparem que acima só poderei excluir um valor na tabela A, (12,30)
Sei que posso usar o ABS para transformar os valores negativos em positivos, mas como excluir a mesma quantidade nas duas tabelas?
Desde já agradeço.
Galera, poderiam me ajudar a resolver um problema que já me acompanha a algum tempo?
Tenho duas tabelas com campos de valores. Uma das tabelas possui valores positivos e a outra negativos.
Em alguns casos, a tabela que possui valores positivos, possui mais registros com mesmo valor da tabela de valores negativos.
A minha dúvida é como faço para que o sistema exclua a mesma quantidade de registros na tabela de valores negativos na de positivo.
Ex:
tabela A(valores positivos)
ID Valor
1 12,30
2 12,30
3 14,00
tabela B(valores negativos)
id valor1
1 -0,90
2 -34,00
3 -12,30
Reparem que acima só poderei excluir um valor na tabela A, (12,30)
Sei que posso usar o ABS para transformar os valores negativos em positivos, mas como excluir a mesma quantidade nas duas tabelas?
Desde já agradeço.
Josemar Silva
Curtidas 0
Respostas
Joel Rodrigues
07/05/2013
Use o distinct. Exemplo:
Pesquise sobre esse operador para entender seu funcionamento.
SELECT DISTINCT(VALOR) FROM TABELA_A
Pesquise sobre esse operador para entender seu funcionamento.
GOSTEI 0
Guilherme Wiethaus
07/05/2013
Vou postar aqui a que exclui num dos lados do relacionamento.
Diretamente não tem como fazer isto pois delete usa uma tabela
como referência para excluir os dados da outra num relacionamento.
Existe uma solução para isto que vou postar depois desta idéia.
Usando SQL Server 2008 R2 Express.
Execute entao o Codigo para visualizar os dados na tabela que são negativos em correspondencia com os dados que são positivos:
Agora a Exclusão dos registros negativos na tabela D
Diretamente não tem como fazer isto pois delete usa uma tabela
como referência para excluir os dados da outra num relacionamento.
Existe uma solução para isto que vou postar depois desta idéia.
Usando SQL Server 2008 R2 Express.
CREATE TABLE [dbo].[C]( [ID] [int] NULL, [Valor] [money] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[D]( [ID] [int] NULL, [Valor] [money] NULL ) ON [PRIMARY] INSERT [dbo].[C] ([ID], [Valor]) VALUES (1, 10.3000) INSERT [dbo].[C] ([ID], [Valor]) VALUES (2, 12.4000) INSERT [dbo].[C] ([ID], [Valor]) VALUES (3, 8.0000) INSERT [dbo].[C] ([ID], [Valor]) VALUES (4, 10.4500) INSERT [dbo].[D] ([ID], [Valor]) VALUES (1, -10.3000) INSERT [dbo].[D] ([ID], [Valor]) VALUES (2, -9.0000) INSERT [dbo].[D] ([ID], [Valor]) VALUES (3, -10.3000) INSERT [dbo].[D] ([ID], [Valor]) VALUES (4, -10.3100) INSERT [dbo].[D] ([ID], [Valor]) VALUES (5, -10.3150)
Execute entao o Codigo para visualizar os dados na tabela que são negativos em correspondencia com os dados que são positivos:
SELECT D.* FROM D INNER JOIN C ON C.Valor = ABS(D.Valor);
Agora a Exclusão dos registros negativos na tabela D
DELETE D FROM D INNER JOIN C ON C.Valor = ABS(D.Valor);
GOSTEI 0
Guilherme Wiethaus
07/05/2013
Agora a outra maneira de excluir ambos os lados é fazer através de Trigger (gatilho).
Vamos por parte como dizia Jack o Estripador.
1) criar uma tabela temporária #C.
2) Armazenar a chave única de registro (ID) da tabela C em uma tabela temporária #C.
3) Excluir então os registros da tabela D, a qual mencionei no ultimo post.
4) Fazer o relacionamento da tabela temporária #C com a tabela física C e fazer Delete.
5) Deletar a Tabela temporária #C
Pronto, a exclusão foi feita quando deletar da tabela D os seus Dados negativos correspondentes a tabela C que tem os dados positivos estes tambem serão excluídos.
Abraços.
Vamos por parte como dizia Jack o Estripador.
1) criar uma tabela temporária #C.
2) Armazenar a chave única de registro (ID) da tabela C em uma tabela temporária #C.
3) Excluir então os registros da tabela D, a qual mencionei no ultimo post.
DELETE D FROM D INNER JOIN C ON C.Valor = ABS(D.Valor);
4) Fazer o relacionamento da tabela temporária #C com a tabela física C e fazer Delete.
DELETE C FROM C INNER JOIN #C ON #C.ID = C.ID;
5) Deletar a Tabela temporária #C
DROP TABLE #C
Pronto, a exclusão foi feita quando deletar da tabela D os seus Dados negativos correspondentes a tabela C que tem os dados positivos estes tambem serão excluídos.
Abraços.
GOSTEI 0
Guilherme Wiethaus
07/05/2013
Não mostrei o código do ítem 2 pois acho que saiba como fazer.
Abraços
Abraços
GOSTEI 0
Josemar Silva
07/05/2013
Obrigado pela ajuda de todos.
GOSTEI 0