MySQL - Fazendo Insert com Subquery
Muitas pessoas utilizam scripts PHP para ler dados de uma tabela do DB e jogar em outra porém isso pode ser feito diretamente através do MySQL de maneira muito fácil e muito mais rapidamente.
Vamos a um exemplo em que lemos os nomes femininos de uma tabela 'nome' e os referenciamos em uma tabela chamada 'empresarias'.
Tabela 'nome'
| id | | nome | | genero |
|---|---|---|
| 1 | Pedro | m |
| 2 | Souza | m |
| 3 | Santiago | m |
| 4 | Ana | f |
| 5 | Rosa | f |
| 6 | Tom | m |
| 7 | Tobias | m |
| 8 | Otavio | m |
| 9 | Hugo | m |
Tabela 'empresarias' com o campo 'id' AUTO INCREMENT
| id | | id_nome |
|---|
Se fizermos um Select simples da tabela 'nome':
SELECT
*
FROM
nome
WHERE
genero = 'f'
Teremos como resultado
| id | | nome | | genero |
|---|---|---|
| 4 | Ana | f |
| 5 | Rosa | f |
Ok, são estes dados que queremos referenciar na tabela 'empresarias'. Como proceder agora?
Podemos inserir diretamente os dados de uma tabela em outra utilizando o SELECT (uma subquerie) como origem. Vamos inserir todos os nomes femininos na tabela 'empresarias'
INSERT INTO
empresarias
(
id_nome
)
SELECT
id
FROM
nome
WHERE
genero = 'f'
Veja que em nosso novo select especificamos como único campo de retorno 'id' pois queremos apenas os ids dos nomes femininos. Quando fazemos INSERTS baseados em SELECTS devemos sempre tomar o cuidado de 'casar' a quantidade de campos e sua ordem.
Como 'empresarias' é uma tabela de referência não precisamos inserir todos os dados, inserimos apenas o id. Temos como resultado:
| id | | id_nome |
|---|---|
| 1 | 4 |
| 2 | 5 |
cujos ids coincidem com nosso select anterior.
Boa sorte!

Comentários
Postar um comentário