我有第一个数据库(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的更多信息,请参阅此完整列表
如果您ALTER对表有足够的权限,只需使用此语法手动转换和匹配其排序规则,
ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin2 COLLATE 'latin2_general_ci';
Run Code Online (Sandbox Code Playgroud)