Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como juntar à esquerda 2 tabelas em 2 bancos de dados diferentes?


Você pode simplesmente juntar a tabela de banco de dados diferente. Você precisa especificar o nome do banco de dados em seu FROM cláusula. Para torná-lo mais curto, adicione um ALIAS nele,
SELECT  a.*,          -- this will display all columns of dba.`UserName`
      b.`Message`
FROM  dba.`UserName` a  -- or LEFT JOIN to show all rows whether it exists or not
      INNER JOIN dbB.`PrivateMessage` b    
         ON a.`username` = b.`username`

mas de alguma forma, existem possibilidades em que um username não terá mensagens. Neste caso, use LEFT JOIN se você quiser ainda mostrar todos os registros de dba.Username .

Lendo seus comentários, as tabelas têm diferentes collation . A solução para isso é especificar COLLATE em suas declarações combinadas,
SELECT  a.*,          -- this will display all columns of dba.`UserName`
      b.`Message`
FROM  dba.`UserName` COLLATE latin1_swedish_ci a  
      LEFT JOIN dbB.`PrivateMessage` COLLATE latin1_swedish_ci b    
         ON a.`username` = b.`username`

você pode alterar latin1_swedish_ci para o que você quiser.

Para obter mais informações sobre COLLATION, consulte esta lista completa de

Conjuntos de caracteres e agrupamentos no MySQL

Se você tiver privilégios suficientes para ALTER as tabelas, basta usar esta sintaxe para converter manualmente e combinar seus agrupamentos,
ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin2 COLLATE 'latin2_general_ci';