sql >> Databáze >  >> RDS >> Mysql

Jak doleva spojit 2 tabulky ve 2 různých databázích?

Můžete se jednoduše připojit k tabulce jiné databáze. Musíte zadat název databáze v FROM doložka. Chcete-li to zkrátit, přidejte ALIAS na to,

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`

ale jak, tam jsou možnosti, kde-v username nebude mít zprávy. V tomto případě použijte LEFT JOIN pokud chcete stále zobrazovat všechny záznamy dba.Username .

Z vašich komentářů vyplývá, že tabulky mají různé collation . Řešením je zadat COLLATE na vašich spojených prohlášeních,

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`

můžete změnit latin1_swedish_ci na cokoli chcete.

Další informace o COLLATION naleznete v tomto úplném seznamu

Znakové sady a řazení v MySQL

Pokud máte dostatečné oprávnění ALTER tabulky, jednoduše použijte tuto syntaxi k ručnímu převodu a spárování jejich porovnávání

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


  1. Jak vygenerovat plán provádění na serveru SQL Server

  2. mysqli_num_rows nefunguje správně

  3. Rozdíl mezi -> a ::v PHP MySQLi OOP

  4. Funkce PostgreSQL / Uložená procedura CURRENT_TIMESTAMP se nemění