Можно ли создать временную таблицу из запроса выбора и одновременно добавить набор дополнительных столбцов? - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу создать временную таблицу в одну строку, используя 3 столбца + содержимое существующей таблицы с именем affiliateproduct и одновременно добавить 2 столбца title и content во временную таблицу. Оба должны быть типа VARCHAR, однако я не могу определить эти 2 столбца явно в одном запросе. В качестве обходного пути я сделал следующее:

       CREATE TEMPORARY TABLE affiliate_product_results ENGINE = MEMORY SELECT ap.id,
           ap.affiliateImageUrl, ap.rank, "" AS title, "" AS content FROM affiliateproduct ap; 

В результате получается таблица, которая включает 3 столбца из affiliateproduct с соответствующими типами, но заголовок и содержимое оба получают назначенный тип char(0). Это не тот тип, который я хочу. (Вместо этого должно быть varchar(255)). Есть ли способ заставить это работать с правильным назначением типа? (Я знаю, что, возможно, я мог бы присвоить значение " " или что-то еще, и тогда он стал бы varchar (n пробелов), но это довольно глупо.

Есть способ или я вынужден сделать дополнительный столбец вставить запрос после создания временной таблицы.

Спасибо.

РЕДАКТИРОВАТЬ: Я нашел способ сделать это, но он хакерский. Он выглядит так:

       CREATE TEMPORARY TABLE affiliate_product_results ENGINE = MEMORY SELECT ap.id,
           ap.affiliateImageUrl, ap.rank, ap.affiliateImageUrl AS title, ap.affiliateImageUrl AS content FROM affiliateproduct ap; 

Теперь заголовок и контент получают тот же тип столбца, что и affiliateimageUrl (varchar255)

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете получить столбец VARCHAR, используя SPACE с TRIM:

CREATE TEMPORARY TABLE affiliate_product_results ENGINE = MEMORY 
SELECT ap.id, ap.affiliateImageUrl, ap.rank, 
  TRIM(SPACE(255)) AS title, 
  TRIM(SPACE(255)) AS content
FROM affiliateproduct

В случае, если вы хотите инициализировать новый VARCHAR столбцы с NULL:

CREATE TEMPORARY TABLE affiliate_product_results ENGINE = MEMORY 
SELECT ap.id, ap.affiliateImageUrl, ap.rank, 
  IF(TRIM(SPACE(255)) = '', NULL, TRIM(SPACE(255))) AS title, 
  IF(TRIM(SPACE(255)) = '', NULL, TRIM(SPACE(255))) AS content
FROM affiliateproduct

Размер столбца VARCHAR можно настроить с помощью параметра SPACE.

Демонстрация включена dbfiddle.uk

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