mysql - запрос на создание новой таблицы и упорядочение по имени поля не работает

0

Мне нужно создать новую таблицу и скопировать данные из второй таблицы. После этого заказывается по имени поля, но это переупорядочение не работает. Пример. Я создаю новую таблицу и копирую данные из второй таблицы (поле pizzaName = a, b, c) после того, как она изменит порядок в каждом случае/когда. Вот мой код:

CREATE TABLE secondTable (
  pizzaName       VARCHAR(20) NOT NULL,
  lowSize         TINYINT     NOT NULL,
  mediumSize      TINYINT     NOT NULL,
  largeSize       TINYINT     NOT NULL,
  PRIMARY KEY (pizzaName),
  UNIQUE INDEX pizzaName_UNIQUE (pizzaName ASC) VISIBLE
) AS SELECT * FROM firstTable ORDER BY
    CASE
     WHEN pizzaName = 'c' THEN 1
     WHEN pizzaName = 'a' THEN 2
     WHEN pizzaName = 'b' THEN 3
    END;
  • 0
    в таблице sql нет порядка по умолчанию (если он случайный) ... если вам нужен порядок, вы должны всегда использовать правильный порядок в соответствующем выборе.
  • 0
    Можешь написать, как это сделать? Я новичок в MySQL
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Вам нужно разделить это на два.

Стандарт SQL не определяет порядок хранения данных в базе данных - он логически неактуальен (хотя на практике кластерные индексы влияют на порядок). Невозможно указать порядок, в котором хранятся данные, кроме создания кластерного индекса, но который не поддерживается повсеместно.

То, что вы можете сделать, это указать порядок, в котором вы извлекаете данные при запросе - то, что делает предложение "order by".

Итак, шаг 1 состоит в том, чтобы создать копию таблицы (не знаете, почему вы хотите это сделать, но предположите, что это необходимо):

CREATE TABLE secondTable (
  pizzaName       VARCHAR(20) NOT NULL,
  lowSize         TINYINT     NOT NULL,
  mediumSize      TINYINT     NOT NULL,
  largeSize       TINYINT     NOT NULL,
  PRIMARY KEY (pizzaName),
  UNIQUE INDEX pizzaName_UNIQUE (pizzaName ASC) VISIBLE
) AS SELECT * FROM firstTable 

Шаг 2: извлечение данных из вашей копии:

SELECT * FROM secondTable ORDER BY
    CASE
     WHEN pizzaName = 'c' THEN 1
     WHEN pizzaName = 'a' THEN 2
     WHEN pizzaName = 'b' THEN 3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню