我有第一个数据库 (dbA), 具有这样的表,名为 Username :
+------------------+--------------+ | Username | PhoneNumber | +------------------+--------------+ | jamesbond007 | 555-0074 | | batmanbegins | 555-0392 | +------------------+--------------+
然后,在另一侧,我有 一个 带有这样的表的 dbB ,名为 PrivateMessage :
+------------------+---------------------------------+ | Username | Message | +------------------+---------------------------------+ | jamesbond007 | I need new bond-girl | | batmanbegins | thanks for the paycheck, Nolan | +------------------+---------------------------------+
现在,如何组合来自2个不同数据库的这两个表,以便输出看起来像这样:
+------------------+--------------+---------------------------------+ | Username | PhoneNumber | Message | +------------------+--------------+---------------------------------+ | jamesbond007 | 555-0074 | I need new bond-girl | | batmanbegins | 555-0392 | thanks for the paycheck, Nolan | +------------------+--------------+---------------------------------+
您可以简单地加入不同数据库的表。您需要在FROM子句中指定数据库名称。要使其更短,请在其ALIAS上添加一个,
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`
但是有些方法却有可能-在其中username没有消息。在这种情况下,LEFT JOIN如果您仍要显示的所有记录,请使用dba.Username。
username
LEFT JOIN
dba.Username
从您的评论中读取,这些表具有不同的collation。解决此问题的方法是COLLATE在您的联接语句中指定,
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`
您可以更改latin1_swedish_ci为任何您想要的。
latin1_swedish_ci
有关COLLATION的更多信息,请参阅以下完整列表
MySQL中的字符集和排序规则
如果您ALTER对表有足够的特权,只需使用此语法即可手动转换并匹配它们的排序规则,
ALTER
ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin2 COLLATE 'latin2_general_ci';