MySQL加入联合视图不起作用

时间:2014-06-26 10:12:52

标签: mysql join federated-table

我想加入一个包含视图的表,其中一个表L是本地的,而视图F是一个驻留在另一个服务器上的FEDERATED视图:

SELECT * FROM L LEFT JOIN F ON L.id = F.id;

现在JOIN没有命中,尽管表和视图之间确实有很多匹配。 ID字段为bigint

感到沮丧,我创建了一个TEMPORARYT并将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...';

1 个答案:

答案 0 :(得分:1)

根据FEDERATED存储引擎的定义,您必须在两个服务器上具有表结构定义(例如,MyISAM的.frm个文件) 。那是因为FEDERATED引擎的工作原理:

enter image description here

因此,您不能使用VIEW,因为它具有完全不同的含义和结构。因此,您应该镜像您的表格,然后您就可以在查询中使用它。