=================================================================
Howto: Como realizar a busca em dois bancos distintos e unir o resultado em apenas um SQL?
=================================================================
Primeiro o problema:
Você precisa fazer uma busca em dois bancos de dados e mostrar o resultado em um lugar só, isso porque você tem partes dos dados em um banco e o restante dos dados em outro banco, e por motivo estrutural, burocrático… sabe-se lá porque…. você não pode unir tudo em um único database.
Solução:
Você pode unir dois resultados (inclusive de drivers/bancos que estejam na mesma conexão) em um unico result, mesclando os dados. Para isso deve-se utilizar a estrutura UNION.
Analisemos a seguinte query:
[sql]
SELECT cod, nome, idade FROM pessoas
SELECT codigo, nome_completo, idade FROM pessoas_nao_cadastradas
[/sql]
Primeiro, você deve ter resultados iguais para cada select, para isso use alias para igualar os resultados.
[sql]
SELECT cod, nome, idade FROM pessoas
SELECT codigo AS cod, nome_completo AS nome, idade FROM pessoas_nao_cadastradas
[/sql]
Agora, basta você usar o UNION entre os dois selects:
[sql]
SELECT cod, nome, idade FROM pessoas
UNION
SELECT codigo AS cod, nome_completo AS nome, idade FROM pessoas_nao_cadastradas
[/sql]
Já, agora você tem o resultado de dois bancos de dados mesclados em um só.
E como fazer um LIKE (WHERE)?
Você deve fazer um WHERE ou nos dois SELECTs ou fazer um SELECT que totaliza os dois:
[sql]
SELECT xyz.* FROM (
SELECT cod, nome, idade FROM pessoas
UNION
SELECT codigo AS cod, nome_completo AS nome, idade FROM pessoas_nao_cadastradas
) xyz WHERE nome = ‘Paulo’
[/sql]
Quero deixar aqui minha humilde contribuição a fim de agregar um pouco mais ao seu texto.
A algum tempo passei por uma situação parecida e resolvi da mesma forma e pra matar a cobra e mostrar o pau eu joguei a SQL em uma view assim eu pude usar a SQL em outras partes da minha aplicação.
Eu não vi o exemplo de dois bancos distintos ai, somente de duas tabelas – ou seja, um union simples…
Mas no caso não há necessidade d especificar d qual Banco é cada Tabela??
Bem, é claro que há necessidade de especificar a conexão de cada banco, o que fiz foi extrair essa parte para compor o post, mas é necessário as especificações de cada BD. Vejam este outro exemplo:
$link = mysql_connect(‘localhost’, ‘root’, ”);
$link2 = mysql_connect(‘REMOTE IP’, ‘remote_user’, ‘password’);
mysql_select_db(‘remote_db’, $link2);
$query = “SELECT local_db.coords.name FROM local_db.coords
union SELECT coords.name FROM coords”;
$result = mysql_query($query) or die(“Query failed : $query ” . mysql_error());
$line = mysql_fetch_array($result);
Preciso de ajuda:
Tenho dois bancos de dados. Em um deles tenho a tabela Origem e a tabela Destino. No outro tenho a tabela Base.
Na tabela Origem tenho os campos X, Y e Z. Na tabela Base tenho os campos X, Y, Z, 1, 2, 3, 4. A tabela Destino tem os mesmos campos da tabela Base.
Como faço para cruzar os campos comuns das tabelas Origem e Base (X, Y e Z) e colocando o resultado na tabela Destino?