[RESOLVIDO] [INSERT] Pegar valor de algumas FK automaticamente

Pessoal tenho esse esquema no meu banco de dados:

[URL=http://img219.imageshack.us/i/model.png/][/URL]

Tenho uma dúvida sobre o comando INSERT na tabela Usuarios_na_UnidadeEscolar, e a dúvida é a seguinte:

Há alguma maneira de importar automaticamente os valores das FKs [color=orange]UnidadeEscolar_TiposDeUnidadeEscolar_idTipoDeUnidadeEscolar[/color], [color=orange]UnidadeEscolar_DiretoriaRegional_idDiretoriaRegional[/color], [color=orange]UnidadeEscolar_DiretoriaLocal_idDiretoriaLocal[/color] apenas informando o valor do campo [color=blue]UnidadeEscolar_idUnidadeEscolar[/color]?

Exemplo: Eu, apenas com este Insert: [color=blue]INSERT INTO Usuarios_na_UnidadeEscolar (Usuarios_loginUsuarios, UnidadeEscolar_idUnidadeEscolar, GruposDePermissoes_idGrupoDePermissoes) VALUES (‘THIAGO’, ‘DR. AUGUSTO REIS’, ‘ADMINISTRADORES’);[/color] gostaria que os campos citados acima se preenchessem automaticamante.
Tipo, como eu estou informando que a FK que vem da tabela UnidadeEscolar é a escola Dr. Augusto Reis, o banco de dados importasse da tabela UnidadeEscolar, todo o conteúdo das FKs (citadas acimas) do registro que tem a PK Dr. Augusto Reis.

Há alguma maneira?

Não sei se conseguir ser claro e específico, porém, espero que vc’s entendam minha intenção.

Forte abraço.

Estou usando as seguintes querys:

[size=12]1ª:[/size]
INSERT INTO Usuarios_na_UnidadeEscolar
([color=orange]Usuarios_loginUsuarios[/color],
[color=orange]UnidadeEscolar_idUnidadeEscolar[/color],
[color=orange]GruposDePermissoes_idGruposDePermissoes[/color],
[color=orange]UnidadeEscolar_TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar[/color],
[color=orange]UnidadeEscolar_DiretoriaRegional_idDiretoriaRegional[/color],
[color=orange]UnidadeEscolar_DiretoriaLocal_idDiretoriaLocal[/color])
VALUES (‘THIAGO’, ‘DR. AUGUSTO REIS’, ‘ADMNISTRADORES’, (SELECT TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar, DiretoriaRegional_idDiretoriaRegional, DiretoriaLocal_idDiretoriaLocal FROM UnidadeEscolar WHERE idUnidadeEscolar = ‘THIAGO’));

Porém a mesma está retornando o seguinte erro: Column count doesn’t match value count at row 1

[size=12]2ª:[/size]
INSERT INTO Usuarios_na_UnidadeEscolar
([color=orange]Usuarios_loginUsuarios[/color],
[color=orange]UnidadeEscolar_idUnidadeEscolar[/color],
[color=orange]GruposDePermissoes_idGruposDePermissoes[/color],
[color=orange]UnidadeEscolar_TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar[/color],
[color=orange]UnidadeEscolar_DiretoriaRegional_idDiretoriaRegional[/color],
[color=orange]UnidadeEscolar_DiretoriaLocal_idDiretoriaLocal[/color])(SELECT ‘THIAGO’, ‘DR. AUGUSTO REIS’, ‘ADMNISTRADORES’, TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar, DiretoriaRegional_idDiretoriaRegional, DiretoriaLocal_idDiretoriaLocal FROM EscolaSimples.UnidadeEscolar WHERE idUnidadeEscolar = ‘THIAGO’)

A segunda não dá erro algum, mas tbm não grava as informações na tabela.

O que pode ser?

Cartoni,

Que doidera é essa que vc tá fazendo brow… :wink:

Seguinte…

Execute as queries SELECT para recuperar os ids TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar, DiretoriaRegional_idDiretoriaRegional e DiretoriaLocal_idDiretoriaLocal, armazene em variáveis e depois concatene na String da query INSERT.

Algo assim:


String sql = "SELECT TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar, 
                             DiretoriaRegional_idDiretoriaRegional, 
                             DiretoriaLocal_idDiretoriaLocal 
                     FROM UnidadeEscolar 
                  WHERE idUnidadeEscolar = 'THIAGO'";

// Execute a SQL e recupere os id's

Long idTipoDeUnidadeEscolar = rs.getLong("TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar");
Long idDiretoriaRegional = rs.getLong("DiretoriaRegional_idDiretoriaRegional");
Long idDiretoriaLocal = rs.getLong("DiretoriaLocal_idDiretoriaLocal");

StringBuffer sql = new StringBuffer();
sql.append(" INSERT INTO Usuarios_na_UnidadeEscolar ");
sql.append("         (Usuarios_loginUsuarios, UnidadeEscolar_idUnidadeEscolar,  ");
sql.append("          GruposDePermissoes_idGruposDePermissoes,  ");
sql.append("          UnidadeEscolar_TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar,  ");
sql.append("          UnidadeEscolar_DiretoriaRegional_idDiretoriaRegional,  ");
sql.append("          UnidadeEscolar_DiretoriaLocal_idDiretoriaLocal) ");
sql.append("    VALUES ('THIAGO', 'DR. AUGUSTO REIS', 'ADMNISTRADORES',  ");
sql.append("                " + idTipoDeUnidadeEscolar + ", " + idDiretoriaRegional + ",  " + idDiretoriaLocal);
sql.append("                ); ");

Naquela primeira query sua está retornando erro pq o resultado da sql são 3 campos mas vc somente pode retornar um. Você poderia colocar 3 SQL diferentes retornando uma para cada campo de id.

Se você fizer assim vai funcionar:


INSERT INTO Usuarios_na_UnidadeEscolar 
    (Usuarios_loginUsuarios, 
     UnidadeEscolar_idUnidadeEscolar, 
     GruposDePermissoes_idGruposDePermissoes, 
     UnidadeEscolar_TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar, 
     UnidadeEscolar_DiretoriaRegional_idDiretoriaRegional, 
     UnidadeEscolar_DiretoriaLocal_idDiretoriaLocal) 
  VALUES ('THIAGO', 
          'DR. AUGUSTO REIS', 
          'ADMNISTRADORES', 
          (SELECT TipoDeUnidadeEscolar_idTipoDeUnidadeEscolar
             FROM UnidadeEscolar 
           WHERE idUnidadeEscolar = 'THIAGO'),
          (SELECT DiretoriaRegional_idDiretoriaRegional
             FROM UnidadeEscolar 
           WHERE idUnidadeEscolar = 'THIAGO')
          (SELECT DiretoriaLocal_idDiretoriaLocal
             FROM UnidadeEscolar 
           WHERE idUnidadeEscolar = 'THIAGO')
         );

@braços

Poxa ccllss, obrigado pela dica.
Eu nunca tinha trabalhando com INSERT com SELECT.

Forte abraço e mto sucesso!