我想加入一个包含视图的表,其中一个表L
是本地的,而视图F
是一个驻留在另一个服务器上的FEDERATED
视图:
SELECT * FROM L LEFT JOIN F ON L.id = F.id;
现在JOIN没有命中,尽管表和视图之间确实有很多匹配。 ID字段为bigint
。
感到沮丧,我创建了一个TEMPORARY
表T
并将F
中的所有内容转储到其中,从而制作了F
的本地副本。使用T
代替F
,JOIN按预期工作。但是创建T
的过程会消耗内存和时间。
这种奇怪的MySQL行为可能是什么原因?
表定义:
CREATE TABLE `L` (
`id` bigint(20) NOT NULL,
`id2` bigint(20) NOT NULL,
PRIMARY KEY (`id`,`id2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
和(此表实际上是远程服务器上的视图):
CREATE TABLE `F` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`field1` bigint(20) NOT NULL,
...
`field5` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://userName:pword...';
答案 0 :(得分:1)
根据FEDERATED
存储引擎的定义,您必须在两个服务器上具有表结构定义(例如,MyISAM的.frm
个文件) 。那是因为FEDERATED
引擎的工作原理:
因此,您不能使用VIEW
,因为它具有完全不同的含义和结构。因此,您应该镜像您的表格,然后您就可以在查询中使用它。