Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment joindre à gauche 2 tables sur 2 bases de données différentes ?

Vous pouvez simplement joindre la table de différentes bases de données. Vous devez spécifier le nom de la base de données dans votre FROM clause. Pour le raccourcir, ajoutez un ALIAS dessus,

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`

mais certains comment, il y a des possibilités où-dans un username n'aura pas de messages. Dans ce cas, utilisez LEFT JOIN si vous souhaitez toujours afficher tous les enregistrements de dba.Username .

En lisant vos commentaires, les tableaux ont un collation différent . La solution consiste à spécifier COLLATE sur vos relevés joints,

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`

vous pouvez changer latin1_swedish_ci à tout ce que vous voulez.

Pour plus d'informations sur COLLATION, consultez cette liste complète de

Jeux de caractères et classements dans MySQL

Si vous avez suffisamment de privilèges pour ALTER les tables, utilisez simplement cette syntaxe pour convertir et faire correspondre manuellement leurs classements,

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