sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo unir a la izquierda 2 tablas en 2 bases de datos diferentes?

Simplemente puede unirse a la tabla de diferentes bases de datos. Debe especificar el nombre de la base de datos en su FROM cláusula. Para acortarlo, agrega un ALIAS en eso,

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`

pero de alguna manera, hay posibilidades en las que un username no tendrá mensajes. En este caso, use LEFT JOIN si aún desea mostrar todos los registros de dba.Username .

Al leer sus comentarios, las tablas tienen diferentes collation . La solución a esto es especificar COLLATE en sus declaraciones conjuntas,

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`

puedes cambiar latin1_swedish_ci a lo que quieras.

Para obtener más información sobre COLLATION, consulte esta lista completa de

Conjuntos de caracteres y colaciones en MySQL

Si tiene suficientes privilegios para ALTER las tablas, simplemente use esta sintaxis para convertir manualmente y hacer coincidir sus intercalaciones,

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin2 COLLATE 'latin2_general_ci';