#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 * FROMA
)` работает?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, потому что расположение результатов неизвестно.