mysql - 如何从同一查询中的字段引用的另一个数据库中选择列值?
问题描述
假设我的数据库中有一个名为“中央”的表:
ID | 姓名 | D B | 顾客 |
---|---|---|---|
1 | 鲍勃 | A1 | 1 |
2 | 马利 | 无效的 | 无效的 |
3 | 艾琳 | A2 | 2 |
客户列引用另一个数据库中的“客户”表。
重要提示:数据库名称 A1 和 A2 只是示例。将有数百个单独的数据库包含一个客户表。central.DB 列是从以下示例数据库下方的 select 语句中选择 CustomerName 时要使用的数据库的引用。
来自数据库“A1”内的客户表的示例:
ID | 顾客 | 顾客姓名 |
---|---|---|
1 | C001 | 阿斯塔住房 |
2 | C002 | 杰克的 |
来自数据库“A2”内的客户表的示例:
ID | 顾客 | 顾客姓名 |
---|---|---|
1 | D900 | 莫氏 |
2 | D901 | 汉普莱斯涂料 |
我不知道如何做这样的事情,也许根本不可能:
SELECT Central.id, Central.Name, (central.DB).Customers.CustomerName
FROM central, (central.DB).Customers.
或者也许使用连接来做到这一点?
无论哪种方式,查询结果都应该是:
ID | 姓名 | 顾客姓名 |
---|---|---|
1 | 鲍勃 | 阿斯塔住房 |
2 | 马利 | 无效的 |
3 | 艾琳 | 汉普莱斯涂料 |
也许这是不可能的,结果是我必须用 php 来做?但我不想这样做,因为 central.DB 可能会引用数百个数据库,这可能会相当昂贵(对引用数据库的大量调用)。
(我无法更改使用中央数据库和其他单独数据库的设置)
当该数据库的名称在结果集中时,是否可以引用另一个数据库(表)?
解决方案
如果两个数据库位于同一服务器(MySQL 实例)上,则只需在表前加上数据库名称即可。
SELECT C.id, C.Name, CU.CustomerName FROM database_1.Central AS C LEFT JOIN database_2.Customers AS CU
确保登录的用户有权访问这两个数据库。
推荐阅读
- html - video.js 主题有错误
- mathjax - 我怎样才能中断变量名?
- python - 如何预测 Keras 中每个序列的多个值?LSTM 层
- iframe - 第三方重定向在 iframe 内的 Samesite Lax 预期行为
- c - 立即复制宏中的文本
- javascript - 两个手风琴,但仅使用 Javascript 为第一个箭头设置动画
- c++ - 为什么下面这段代码返回的是指针指向的值而不是指针的地址?
- c++ - 从 GUI 文件资源管理器执行程序,并且不生成终端
- c++ - 有没有办法使用 VFW 将压缩的视频数据写入缓冲区而不是文件?
- xcode - _shouldMakeReadyForDevelopment 检查失败,即使设备没有被密码锁定