当前位置: 首页 > 面试题库 >

如何在2个不同的数据库上保留2个表的联接?

谭富
2023-03-14
问题内容

我有第一个数据库 (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上添加一个,

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

从您的评论中读取,这些表具有不同的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为任何您想要的。

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

MySQL中的字符集和排序规则

如果您ALTER对表有足够的特权,只需使用此语法即可手动转换并匹配它们的排序规则,

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


 类似资料:
  • 问题内容: 我需要比较2个不同数据库中的数据库表,以了解差异所在,是否有一个简单的工具或脚本来实现? 问题答案: redgate SQL数据比较

  • 问题内容: 我试图通过在经典ASP中查询2个数据库(Sybase)来生成报告。 我创建了2个连接字符串: 数据库 A的connA数据库B的connB 两个数据库都位于同一台服务器上(不知道这是否重要) 查询: 其次是: 当我尝试在浏览器中打开此页面时,出现错误消息: Microsoft OLE DB提供程序的ODBC驱动程序错误‘80040e37’ 找不到[DataDirect] [ODBC Sy

  • 问题内容: 我有以下代码在PDF内绘制垂直条形图和折线图。 如何将这2个图形保存在PDF的2个不同页面中。我看到可以使用- 但是,不是使用Canvas,而是使用其中 不存在方法的Drawing对象。 如何将2个图形保存在PDF的2个不同页面中?第二个图形(折线图)的右边与第一个图形(垂直条形图)重叠,从而阻碍了该条形图。 这是我的 代码。 问题答案: 制作画布并在其上渲染图形: 希望能帮助到你 :

  • 有没有办法通过两个列表< code>join两个< code > Spark data frame 具有不同的列名? 我知道如果他们在列表中有相同的名字,我可以做以下事情: 或者,如果我知道不同的列名,我可以这样做: 由于我的方法需要2个列表的输入,这些列表指定哪些列将用于每个DF的,因此我想知道Scala Spark是否有办法做到这一点? 页(page的缩写)我在寻找类似python的东西< c

  • 问题内容: 我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。 例如,我有此表: 我需要查询一个结果: 1.名为“约翰”的人数 2.年龄超过30岁的“约翰”的人数。 我可以通过这种方式对子查询进行操作(这只是示例): 但这非常慢,我正在寻找更快的方法。 与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数? 问题答案: 使用CASE语句,您

  • 问题内容: 在MySQL中,我有两个不同的数据库-我们姑且称之为 一个 和 乙 。 是否可以在数据库 A 中的表与数据库 B中 的表之间执行 联接 ? 问题答案: 是的,假设该帐户具有适当的权限,则可以使用: 您只需要在表引用前面加上它所驻留的数据库的名称即可。