Update com Subselect
Olá Pessoal, estou com o seguinte problema.
Anteriormente tinha um tabela denominada ´CLIENTE´ com um campo denominado ´CIDADE´ e recentemente precisei criar um campo denomidado [color=blue:7c2823d40b]´ID_CIDADE´[/color:7c2823d40b] que é agora referenciado atravez de ´FK´ com ´TABELA CIDADE´ (Tambem criada recentemente). Acontece que preciso atualizar o campo sem que o usuario tenha que cadastrar as cidades (id_cidade) novamente na ´Tabela clientes´. Ja Inseri todass as cidade que exitem na ´tabela cliente´ na ´tabela cidade criada recentemente´ como o seguinte sql:
IBQryCidade.close
IBQryCidade.sql add(´select distinct( CIDADE) FROM CLIENTE ORDER BY CIDADE´);
IBQryCidade.open;
IBQryCidade.First;
WHILE NOT IBQryCidade.Eof DO
BEGIN
IBSQL1.close;
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add(´insert into CIDADE ´
´ ID, NOME_CIDADE, STATUS)´+
´values ´+
´( :ID, :NOME_CIDADE)´);
IBSQL1.Parambyname(´ID´).AsInteger:=GerarNovoCodigo(´GEN_CIDADE´);;
IBSQL1.Parambyname(´NOME_CIDADE´).AsString:= IBSQL1.ExecQuery;
IBQryCidade.Next;
END;
dmBaseDados.Trans.CommitRetaining;
Acontece que preciso agora atualizar o campo ´ID_CIDADE´ da tabela CLIENTE e não estou conseguindo. Estou tentando o sql abaixo, mas da erro. Alguem pode me ajudar?
[color=red:7c2823d40b]UPDATE CLIENTE SET ID_CIDADE =
(SELECT ID FROM cidade WHERE NOME_CIDADE =
SELECT distinct( CIDADE.nome_cidade) FROM cidade , CLIENTE WHERE CLIENTE.CIDADE = CIDADE.NOME_CIDADE);[/color:7c2823d40b]
Anteriormente tinha um tabela denominada ´CLIENTE´ com um campo denominado ´CIDADE´ e recentemente precisei criar um campo denomidado [color=blue:7c2823d40b]´ID_CIDADE´[/color:7c2823d40b] que é agora referenciado atravez de ´FK´ com ´TABELA CIDADE´ (Tambem criada recentemente). Acontece que preciso atualizar o campo sem que o usuario tenha que cadastrar as cidades (id_cidade) novamente na ´Tabela clientes´. Ja Inseri todass as cidade que exitem na ´tabela cliente´ na ´tabela cidade criada recentemente´ como o seguinte sql:
IBQryCidade.close
IBQryCidade.sql add(´select distinct( CIDADE) FROM CLIENTE ORDER BY CIDADE´);
IBQryCidade.open;
IBQryCidade.First;
WHILE NOT IBQryCidade.Eof DO
BEGIN
IBSQL1.close;
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add(´insert into CIDADE ´
´ ID, NOME_CIDADE, STATUS)´+
´values ´+
´( :ID, :NOME_CIDADE)´);
IBSQL1.Parambyname(´ID´).AsInteger:=GerarNovoCodigo(´GEN_CIDADE´);;
IBSQL1.Parambyname(´NOME_CIDADE´).AsString:= IBSQL1.ExecQuery;
IBQryCidade.Next;
END;
dmBaseDados.Trans.CommitRetaining;
Acontece que preciso agora atualizar o campo ´ID_CIDADE´ da tabela CLIENTE e não estou conseguindo. Estou tentando o sql abaixo, mas da erro. Alguem pode me ajudar?
[color=red:7c2823d40b]UPDATE CLIENTE SET ID_CIDADE =
(SELECT ID FROM cidade WHERE NOME_CIDADE =
SELECT distinct( CIDADE.nome_cidade) FROM cidade , CLIENTE WHERE CLIENTE.CIDADE = CIDADE.NOME_CIDADE);[/color:7c2823d40b]
Siro
Curtidas 0
Respostas
Emerson Nascimento
25/03/2005
tente assim:
UPDATE CLIENTE SET ID_CIDADE = (SELECT ID FROM cidade WHERE NOME_CIDADE = CIDADE.nome_cidade)
GOSTEI 0
Siro
25/03/2005
Ola emerson,
Ainda contiua o erro:
[color=blue:b5f53d04c7]multiple rows in singleton select[/color:b5f53d04c7]
Ainda contiua o erro:
[color=blue:b5f53d04c7]multiple rows in singleton select[/color:b5f53d04c7]
GOSTEI 0
Emerson Nascimento
25/03/2005
se está dando esse erro, há duas cidades cadastradas com o mesmo nome.
tente assim que deverá funcionar: UPDATE CLIENTE SET ID_CIDADE = (SELECT max(ID) FROM cidade WHERE NOME_CIDADE = CIDADE.nome_cidade)
GOSTEI 0
Siro
25/03/2005
Obrigado pela atenção Anderson.
Fiz uma perquena correção aqui [color=blue:7dc0fb2188](WHERE NOME_CIDADE = CLIENTE.CIDADE)[/color:7dc0fb2188] e funcionou perfeitamente...
Valeu, me poupou muita ´dor de cabeça´!
T+
Fiz uma perquena correção aqui [color=blue:7dc0fb2188](WHERE NOME_CIDADE = CLIENTE.CIDADE)[/color:7dc0fb2188] e funcionou perfeitamente...
Valeu, me poupou muita ´dor de cabeça´!
T+
GOSTEI 0
Siro
25/03/2005
Perdao emerson,
Troquei se nome.
Abraços.
Troquei se nome.
Abraços.
GOSTEI 0