Ошибка «Операнд должен содержать 1 столбец (столбцы)» при вставке двух таблиц в одну в MySQL - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу вставить две разные таблицы в одну, как показано на рисунке ниже: The tables I want to insert

Я пробовал несколько способов, таких как:

INSERT INTO com_short 
    (category_id, media_folder_id, gallery_folder_id, status, important, 
    bgPositioning, published_at, published_by, created_at, modified_at,title, 
    slug, body, featured_image_file_id) 

SELECT (SELECT com_post.id, category_id, media_folder_id, gallery_folder_id,    
               status, important, bgPositioning, published_at, published_by, 
               com_post.created_at, com_post.modified_at 
        FROM com_post 
            INNER JOIN com_post_translation ON com_post.id = com_post_translation.post_id 
        WHERE com_post_translation.post_id = com_post.id
        ),

        (SELECT title, slug, body,featured_image_file_id 
        FROM com_post_translation 
        WHERE com_post.id = com_post_translation.post_id
        );

Но он показывает ошибку как следует:

The error

Что мне не хватает?

1 Ответ

0 голосов
/ 19 февраля 2020

Причина ошибки: вы не можете выбрать более одного столбца в подзапросе:

SELECT (SELECT com_post.id, category_id, media_folder_id, gallery_folder_id,    
               status, important, bgPositioning, published_at, published_by, 
               com_post.created_at, com_post.modified_at 
        FROM com_post 
            INNER JOIN com_post_translation ON com_post.id = com_post_translation.post_id 
        WHERE com_post_translation.post_id = com_post.id
        ),

        (SELECT title, slug, body,featured_image_file_id 
        FROM com_post_translation 
        WHERE com_post.id = com_post_translation.post_id
        );

Простое объяснение :

Это приведет к ошибке:

select (select '1', '2');

Это не будет:

select (select '1');

Проверьте демонстрацию

Каков будет способ сделать это без ошибок :

INSERT INTO com_short (category_id --1
                       , media_folder_id --2
                       , gallery_folder_id --3
                       , status --4
                       , important --5
                       , bgPositioning --6
                       , published_at --7
                       , published_by --8
                       , created_at --9
                       , modified_at --10
                       , title --11
                       , slug --12
                       , body --13
                       , featured_image_file_id) --14 
SELECT cpt.category_id --1
       , cpt.media_folder_id --2
       , cpt.gallery_folder_id --3
       , cpt.status --4
       , cpt.important --5
       , cpt.bgPositioning --6
       , cpt.published_at --7
       , cpt.published_by --8
       , com_post.created_at --9
       , com_post.modified_at --10
       , cpt.title --11
       , cpt.slug --12
       , cpt.body --13
       , cpt.featured_image_file_id --14
FROM com_post 
INNER JOIN com_post_translation cpt ON com_post.id = cpt .post_id

Примечание : Это всего лишь пример, я не могу точно знать из вашего вопроса, что вы хотите сделать ... .

Дополнительная информация :

  • cpt - псевдоним для таблицы com_post_translation (он делает ваш код «легче» и его легче читать).

  • При объединении двух таблиц с ключевым словом ON нет необходимости повторять это условие в предложении where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...