Сбой запроса MySQL с объединением

#mysql #union

#mysql #объединение

Вопрос:

У меня есть две таблицы A и B, я хотел бы объединить их и сохранить в другой таблице;

 CREATE TABLE  myspace.test (
(select * from A ) UNION ( select * from B) );
  

Сбой с ошибкой

У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘CREATE TABLE myspace.test ( (выберите * из ) UNION (ов’ в строке 1

Но запрос с помощью: (select * from A ) UNION ( select * from B) выдает правильный результат.

Как сохранить результат объединения в другой таблице??

Спасибо, Арман.

Редактировать

Ну, после игры я обнаружил, что:

  • Запрос без внешних скобок работает.

    СОЗДАЙТЕ ТАБЛИЦУ myspace.test (выберите * из A ) ОБЪЕДИНЕНИЕ (выберите * из B) ;

  • Добавление AS не решает проблему.

  • Мне было интересно, что запрос со скобками работает хорошо, кажется ошибкой или, может быть, я что-то упускаю?

    СОЗДАЙТЕ ТАБЛИЦУ myspace.test (выберите * из A);

Ответ №1:

 CREATE TABLE
        myspace.test
AS
SELECT  *
FROM    A
UNION
SELECT  *
FROM    B
  

Комментарии:

1. Хорошее решение. Это действительно сработает, если в таблицах A и B. идентификатор автоматического увеличения не определен. Если есть, то, скорее всего, у него будут дубликаты.

2. @Skorpioh: @op утверждает, что его запрос возвращает правильные результаты (что бы он под этим ни подразумевал). Все, что я сделал, это небольшая коррекция синтаксиса.

3. AS не было проблемой, внешние скобки не разрешены, когда я делаю объединение. Я только что добавил редактирование.

Ответ №2:

Прочитайте документацию. Вокруг select-statement нет скобок в скобках.

 CREATE TABLE `myspace`.`test` (SELECT * FROM `A`) UNION (SELECT * FROM `B`);
  

Однако следите за дублирующимися первичными ключами. Возможно, вы захотите сначала создать пустую таблицу myspace.test с правильной компоновкой, а затем более выборочно вставлять в нее строки.

Комментарии:

1. Хорошо, но почему инструкция CREATE TABLE myspace . test` (SELECT * FROM A )` работает?

2. @Arman: Навскидку не уверен. Просмотрите грамматику в документации.

3. Кто-нибудь понимает разницу? Я всегда создаю таблицу, используя круглые скобки для эстетических целей. Каким-то образом использование UNION в create table имеет значение. Очень озадачивает.

4. @Heisenberg: Это не так уж и сложно, и на самом деле это не имеет значения. Просто так оно и есть.

Ответ №3:

На первый взгляд это выглядит неправильно.

Начните с простого создания вашей новой пустой таблицы с помощью CREATE TABLE.

Затем запустите запрос для его заполнения, должно быть что-то вроде

 INSERT INTO newTable(field1, field2,..., fieldN)
SELECT temp.field1, temp.field2,...,temp.fieldN
FROM
(
    SELECT field1, field2,...,fieldN
    FROM A
    UNION
    SELECT field1, field2,...,fieldN
    FROM B
) temp
  

Надеюсь, это поможет!

Комментарии:

1. @Scorpioh: Спасибо, но, к сожалению, я не могу создать NewTable, потому что расположение результатов неизвестно.