【问题标题】:Federated table of two LEFT JOIN tables not working两个 LEFT JOIN 表的联合表不起作用
【发布时间】:2014-11-14 13:24:13
【问题描述】:

由于某些原因,我在执行以下查询时收到以下错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 35 行的“ENGINE=FEDERATED”附近

CREATE TABLE users AS (
  SELECT
    ID, user_email, user_registered,
    first_name.meta_value as first_name,
    last_name.meta_value as last_name,
    telephone.meta_value as telephone,
    country.meta_value as country,
    company.meta_value as company,
    address.meta_value as address,
    city.meta_value as city,
    professional_title.meta_value as professional_title,
    state.meta_value as state,
    areas_of_interest.meta_value as areas_of_interest
    FROM wp_users
    LEFT JOIN wp_usermeta AS first_name ON first_name.user_id=ID
        AND first_name.meta_key='first_name'
    LEFT JOIN wp_usermeta AS last_name ON last_name.user_id=ID
        AND last_name.meta_key='last_name'
    LEFT JOIN wp_usermeta AS telephone ON telephone.user_id=ID
        AND telephone.meta_key='telephone'
    LEFT JOIN wp_usermeta AS country ON country.user_id=ID
        AND country.meta_key='country'
    LEFT JOIN wp_usermeta AS company ON company.user_id=ID
        AND company.meta_key='company'
    LEFT JOIN wp_usermeta AS address ON address.user_id=ID
        AND address.meta_key='address'
    LEFT JOIN wp_usermeta AS city ON city.user_id=ID
        AND city.meta_key='city'
    LEFT JOIN wp_usermeta AS professional_title ON professional_title.user_id=ID
        AND professional_title.meta_key='professional_title'
    LEFT JOIN wp_usermeta AS state ON state.user_id=ID
        AND state.meta_key='state'
    LEFT JOIN wp_usermeta AS areas_of_interest ON areas_of_interest.user_id=ID
        AND areas_of_interest.meta_key='areas_of_interest'
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION "*****";

注意:FEDERATED 引擎已打开并正在处理其他未连接的表。

【问题讨论】:

    标签: mysql federated-storage-engine


    【解决方案1】:

    简答:
    FEDERATED 表的 CREATE 语句需要一条额外的数据,称为 CONNECTION。语句中没有这些数据是语法错误的根源。

    长答案:

    对于这个特定实例,VIEW 将是比 FEDERATED 表更好的工具。

    FEDERATED 存储引擎类似于 Linux 中的符号链接或 Windows 中的快捷方式。它主要用于访问服务器上的表,该服务器实际上并不在本地存储表,而是在不同的 mysql 服务器上。因此,当您创建 FEDERATED 表时,您还必须在 CREATE 语句中包含 FEDERATED 存储引擎应该使用的 CONNECTION。您可以选择在存储数据的同一主机上创建一个 FEDERATED 表,但这会导致由于访问本地数据所采取的不必要步骤而导致的额外开销。详情请见this link

    另一方面,VIEW 就像一个存储查询,每当您查询 VIEW 表时都会执行该查询。 This page 可以为您提供更多信息。

    【讨论】:

    • 我忘记在我的问题中包含连接字符串,但我有它并尝试使用原始查询。还是一样的错误..
    • FEDERATED 存储引擎进行一对一匹配。远程 mysql 服务器上存在的表结构必须忠实地复制到本地 mysql 服务器上,唯一不同的是存储引擎部分。
    • 假设我在服务器 A 上有一个名为 meta_value 的表,我希望能够在服务器 B 上查询它。我首先在服务器 A 上发出此命令:SHOW CREATE TABLE meta_value;我将生成的 create 语句(除了引擎部分),并将其粘贴到服务器 B。然后我将在底部添加 FEDERATED 信息。
    • 我希望能够在服务器 B 上查询的服务器 A 上存在的每个表都必须“重新创建”为服务器 B 上的 FEDERATED 表。然后您可以进行连接。
    • 感谢您的建议。如果表在同一个服务器数据库上并且需要将上述左连接表与联合方法以外的其他方法同步怎么办?您建议的解决方案是什么?
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 2019-06-13
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多