Mysql
 sql >> Database >  >> RDS >> Mysql

Come lasciare unire 2 tabelle su 2 database diversi?

Puoi semplicemente unirti alla tabella di diversi database. Devi specificare il nome del database nel tuo FROM clausola. Per accorciarlo, aggiungi un ALIAS su di esso,

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`

ma in qualche modo, ci sono possibilità in cui in un username non avrà messaggi In questo caso usa LEFT JOIN se vuoi comunque mostrare tutti i record di dba.Username .

Leggendo dai tuoi commenti, le tabelle hanno collation diverse . La soluzione è specificare COLLATE sulle tue dichiarazioni unite,

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`

puoi cambiare latin1_swedish_ci a quello che vuoi.

Per maggiori informazioni su COLLATION, consulta questo elenco completo di

Set di caratteri e confronti in MySQL

Se hai abbastanza privilegi per ALTER le tabelle, usa semplicemente questa sintassi per convertire manualmente e abbinare le loro regole di confronto,

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