Comparação
07/05/2013
0
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
Posts
07/05/2013
Joel Rodrigues
SELECT DISTINCT(VALOR) FROM TABELA_A
Pesquise sobre esse operador para entender seu funcionamento.
28/05/2013
Guilherme Wiethaus
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);
28/05/2013
Guilherme Wiethaus
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.
28/05/2013
Guilherme Wiethaus
Abraços
Clique aqui para fazer login e interagir na Comunidade :)