如何在2个不同的数据库上连接2个表?

Sai*_*son 15 mysql sql

我有第一个数据库(dbA)与这样的表,名为Username:

+------------------+--------------+
| Username         | PhoneNumber  |
+------------------+--------------+
| jamesbond007     | 555-0074     |
| batmanbegins     | 555-0392     |
+------------------+--------------+
Run Code Online (Sandbox Code Playgroud)

那么,另一方面,我有这样的表dbB,名为PrivateMessage:

+------------------+---------------------------------+
| Username         | Message                         |
+------------------+---------------------------------+
| jamesbond007     | I need new bond-girl            |
| batmanbegins     | thanks for the paycheck, Nolan  |
+------------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

现在,如何从两个不同的数据库中组合这两个表,以便输出如下所示:

+------------------+--------------+---------------------------------+
| Username         | PhoneNumber  | Message                         |
+------------------+--------------+---------------------------------+
| jamesbond007     | 555-0074     | I need new bond-girl            |
| batmanbegins     | 555-0392     | thanks for the paycheck, Nolan  |
+------------------+--------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

Joh*_*Woo 14

您可以简单地加入不同数据库的表.您需要在FROM子句中指定数据库名称.为了缩短它,添加一个ALIAS,

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`
Run Code Online (Sandbox Code Playgroud)

但有些方面,有可能在哪里username不会有消息.在这种情况下使用,LEFT JOIN如果你仍然想要显示的所有记录dba.Username.

从您的评论中读取,表格有所不同collation.解决这个问题的方法是COLLATE在你的联合声明中指定,

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`
Run Code Online (Sandbox Code Playgroud)

你可以改变latin1_swedish_ci你想要的任何东西.

有关COLLATION的更多信息,请参阅此完整列表

MySQL中的字符集和排序规则


如果您ALTER对表有足够的权限,只需使用此语法手动转换和匹配其排序规则,

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin2 COLLATE 'latin2_general_ci';
Run Code Online (Sandbox Code Playgroud)