Ir para conteúdo
Fórum Script Brasil
  • 0

Usar O Update Em Consultas


Guest - Wellington -

Pergunta

Guest - Wellington -

Boa noite Galera,

Estou tendo dificuldades para utilizar o update em consultas com inner join .

Quero aumentar o salário apenas dos clientes que compraram cd , fazendo tudo de uma vez , imaginando não saber o numero de todos meus clientes .

Vou tentar explicar :

Vou utilizar essas três tabelas

create database pinheiros

-- Clientes (cod_cli , nome_cli, salario )

-- Titulo (cod_prod , nome_prod, valor , qtd)

-- Pedido (cod_ped ,num_pedi, qtd_venda, data do pedido , cod_cli , cod_prod )

use pinheiros

create table clientes (cod_cli int primary key not null ,

nome_cli varchar(40),salario money not null check(salario > 0 ))

create table titulo (cod_prod int primary key not null ,

nome_prod varchar(40), valor money not null check (valor > 0),

qtd int check (qtd > 0))

create table pedido (cod_ped int not null ,

num_ped int not null ,

qtd_ped int not null ,

dt_pedido smalldatetime not null,

cod_cli int foreign key references clientes (cod_cli),

cod_prod int foreign key references titulo (cod_prod),

primary key (cod_prod, num_ped))

-- Inserindo dados nas tabelas

select * from clientes

insert into clientes values (01,'Wellington',1500)

insert into clientes values (02,'Vanessa',950)

insert into clientes values (03,'Alexandre',750)

insert into clientes values (04,'Cíntia',1250)

insert into clientes values (05,'Rodrigo',680)

insert into clientes values (06,'Carol',2400)

insert into clientes values (07,'Rafael',800)

select * from titulo

insert into titulo values (01,'CD-Rappa',25,500)

insert into titulo values (02,'CD-Ivete Sangalo',38,2000)

insert into titulo values (03,'CD-Revelação',20,300)

insert into titulo values (04,'CD-Babado Novo',22,350)

insert into titulo values (05,'CD-Roberto Carlos',30,150)

insert into titulo values (06,'CD-Daniel',28,400)

insert into titulo values (07,'CD-Carnaval 2005',32,700)

insert into titulo values (08,'CD-Sandy & Junior',42,650)

insert into titulo values (09,'CD-Capital Inicial',30,260)

select * from pedido

insert into pedido values (001,01,2,'2005-05-22',01,3)

insert into pedido values (002,02,1,'2005-05-22',02,1)

insert into pedido values (003,03,3,'2005-05-22',05,2)

insert into pedido values (004,04,1,'2005-05-22',01,4)

insert into pedido values (005,05,1,'2005-05-22',05,8)

insert into pedido values (006,06,2,'2005-05-22',06,5)

insert into pedido values (007,07,4,'2005-05-22',07,6)

insert into pedido values (005,08,1,'2005-05-22',02,7)

Sei quais clients compraram Cd´s fazendo essa consulta

-- selecionar o nome do cliente e qual CD ele compro

select clientes.nome_cli , titulo.nome_prod

from pedido

inner join clientes on pedido.cod_cli = clientes.cod_cli

inner join titulo on pedido.cod_prod = titulo.cod_prod

order by clientes.nome_cli asc

e os que não compraram cd´s fazendo essa consulta

-- selecionar os clientes que não compraram nenhum cd

select nome_cli

from clientes

where cod_cli not in(select pedido.cod_cli

from pedido

inner join clientes on pedido.cod_cli = clientes.cod_cli

inner join titulo on pedido.cod_prod = titulo.cod_prod )

ENTÃO GOSTARIA DE DAR UM AUMENTO DE 10 % NO SALÁRIO DOS CLIENTES QUE COMPRARAM CD . DO JEITO QUE SEI ... ACABO DANDO AUMENTO PARA TODOS . IMAGINANDO NÃO SABER A QUANTIDADE CERTA DE CLIENTES . COMO POSSO FAZER ISSO . DIZEM QUE PRECISO DE ALGO FEITO EM CURSOR ... alguém PODE ME AJUDAR ?

Pois do jeito que faço ... acabo dando aumento para todos clientes.

-- fazer uma atualização no salario das pessoas que compram cd ( dando um aumento de 10 % )

if exists

(select clientes.nome_cli

from pedido

inner join clientes on pedido.cod_cli = clientes.cod_cli

inner join titulo on pedido.cod_prod = titulo.cod_prod)

begin

update clientes set salario = salario + (salario/100*10)

end

Alguém pode me dizer como posso fazer uma atualização no salário das pessoas que compram cd ( dando um aumento de 10 % ) ?

Desde já eu agradeço pela atenção

Wellington

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

voce pode criar uma stored procedure com um cursor assim:

create procedure update_compra_cd as

declare @cod_cli int , @salario money;

declare compra_cd cursor for

select cod_cli, salario

from clientes

where cod_cli not in(select pedido.cod_cli

from pedido

inner join clientes on pedido.cod_cli = clientes.cod_cli

inner join titulo on pedido.cod_prod = titulo.cod_prod )

open compra_cd

fetch next from compra_cd into @cod_cli, @salario

while @@fetch_status <> -1

begin

update clientes set salario = salario + (@salario/100*10)

where cod_cli = @cod_cli

fetch next from compra_cd into @cod_cli, @salario

end;

close compra_cd

dealocate compra_cd

Link para o comentário
Compartilhar em outros sites

  • 0

Whellington a procedure que criei anteriormente é para atualizar o salario dos clientes que não compraram cd aqui vai a procedure para atualizar o salario dos clientes que compraram cd conforme voce tinha dito

voce pode criar uma stored procedure com um cursor assim:

create procedure update_compra_cd as

declare @cod_cli int , @salario money;

declare compra_cd cursor for

select clientes.cod_cli, clientes.salario

from pedido

inner join clientes on pedido.cod_cli = clientes.cod_cli

inner join titulo on pedido.cod_prod = titulo.cod_prod

order by clientes.nome_cli asc

open compra_cd

fetch next from compra_cd into @cod_cli, @salario

while @@fetch_status <> -1

begin

update clientes set salario = salario + (@salario/100*10)

where cod_cli = @cod_cli

fetch next from compra_cd into @cod_cli, @salario

end;

close compra_cd

dealocate compra_cd

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...