从两个不同的服务器连接表

我有两个不同的服务器server1和server2,现在我已经db1在server1和db2中server2。我试图像这样在MySQL中加入这两个表。


Select a.field1,b.field2  

FROM  [server1, 3306].[db1].table1 a  

Inner Join [server2, 3312].[db2].table2 b  

ON a.field1=b.field2  

但我收到了错误。在MYSQL中是可能的。


繁星coding
浏览 482回答 3
3回答

胡说叔叔

是的,它可以在MySQL中使用。有问类似的问题以前也。您必须使用FEDERATED ENGINE来执行此操作。这个想法是这样的:您必须具有基于另一个远程位置的表的联合表才能使用您想要的方式。表的结构必须完全相同。CREATE TABLE federated_table (    id     INT(20) NOT NULL AUTO_INCREMENT,    name   VARCHAR(32) NOT NULL DEFAULT '',    other  INT(20) NOT NULL DEFAULT '0',    PRIMARY KEY  (id),    INDEX name (name),    INDEX other_key (other))ENGINE=FEDERATEDDEFAULT CHARSET=latin1CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

梦里花落0921

这是一种破解,它不是一个连接,但我使用bash函数让我觉得我在做跨服务器查询:显式版本:tb2lst(){    echo -n "("    tail -n +2 - | paste -sd, | tr -d "\n"    echo ")"}id_list=$(mysql -h'db_a.hostname' -ume -p'ass' -e "SELECT id FROM foo;" | tb2lst)mysql -h'db_b.hostname' -ume -p'ass' -e "SELECT * FROM bar WHERE foo_id IN $id_list"+--------|-----+| foo_id | val |+--------|-----+| 1      | 3   || 2      | 4   |+--------|-----+我写了一些包装函数,我保存在我的bashrc中,所以我的观点只是一个命令:db_b "SELECT * FROM bar WHERE foo_id IN $(db_a "SELECT id FROM foo;" | tb2lst);"+--------|-----+| foo_id | val |+--------|-----+| 1      | 3   || 2      | 4   |+--------|-----+至少对于我的用例,这将两个查询快速拼接在一起,输出等同于连接,然后我可以将输出管道输出到任何需要它的工具中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL