Объединенная таблица из двух таблиц LEFT JOIN не работает

По некоторым причинам я получаю следующую ошибку при выполнении запроса ниже:

У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'ENGINE=FEDERATED' в строке 35

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 Engine включен и работает на другой неприсоединенной таблице.

1 ответ

Решение

Короткий ответ:
Операторы CREATE для таблиц FEDERATED требуют дополнительного фрагмента данных, который называется CONNECTION. Отсутствие этих данных в вашем утверждении является источником синтаксической ошибки.

Длинный ответ:

Для этого конкретного случая VIEW будет лучшим инструментом, чем таблица FEDERATED.

Механизм хранения FEDERATED может быть похож на символическое соединение в Linux или ярлыки в Windows. Он в основном используется для доступа к таблице на сервере, который на самом деле хранит таблицу не локально, а на другом сервере MySQL. По этой причине, когда вы создаете таблицу FEDERATED, вам также необходимо включить CONNECTION, которую механизм хранения FEDERATED должен использовать в операторе CREATE. Вы можете выбрать создание таблицы FEDERATED на том же хосте, где хранятся данные, но это приведет к дополнительным издержкам, вызванным ненужными шагами, предпринятыми для доступа к локальным данным. Пожалуйста, смотрите эту ссылку для более подробной информации.

С другой стороны, VIEW похож на сохраненный запрос, который выполняется всякий раз, когда вы запрашиваете таблицу VIEW. Эта страница может дать вам больше информации об этом.

Другие вопросы по тегам