Разрешает ли MariaDB псевдоним столбца в предложении ORDER BY? - PullRequest
0 голосов
/ 28 апреля 2020

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

В одном из представлений есть два выбора UNIONed вместе. Каждый выбор создает один и тот же псевдоним столбца одного столбца, который затем используется вне объединения как ORDER BY. Псевдоним создается непосредственно перед FROM в каждом SELECT.

Это нормально работает в MySQL, но компания заявляет, что не может перенести резервную копию DB SQL в MariaDB, поскольку жалуется, что псевдоним в Предложение ORDER BY - это столбец, который не существует. Это известная ошибка MariaDB. ie вы не можете использовать псевдонимы столбцов в ORDER BY?

Код представления приведен ниже на случай, если это поможет, и это ORDER BY jointmember_sn, о котором говорят, что он возражает.

DELIMITER $$

ALTER ALGORITHM =
   TEMPTABLE DEFINER = themam54_sitka @82.71.38.7 SQL SECURITY DEFINER VIEW member_and_joint_member AS
   (SELECT
      member.member_id AS member_id,
      IFNULL(member.member_title, '') AS member_title,
      (
         CASE
            WHEN (
               member.member_known_as IS NOT NULL
            )
            THEN CONCAT(
               member.member_fn_1,
               ' (',
               member.member_known_as,
               ')'
            )
            ELSE member.member_fn_1
         END
      ) AS member_fn,
      member.member_sn AS member_sn,
      member_1.member_id AS joint_member_id,
      IFNULL(member_1.member_title, '') AS joint_member_title,
      (
         CASE
            WHEN (
               member_1.member_known_as IS NOT NULL
            )
            THEN CONCAT(
               member_1.member_fn_1,
               ' (',
               member_1.member_known_as,
               ')'
            )
            ELSE member_1.member_fn_1
         END
      ) AS joint_member_fn,
      member_1.member_sn AS joint_member_sn
   FROM
      (
         (
            joint_member
            JOIN member
               ON (
                  (
                     joint_member.base_member_id = member.member_id
                  )
               )
         )
         JOIN member member_1
            ON (
               (
                  joint_member.partner_member_id = member_1.member_id
               )
            )
      )
   ORDER BY member_sn)
   UNION
   ALL
   (SELECT
      member_1.member_id AS member_id,
      IFNULL(member_1.member_title, '') AS member_title,
      (
         CASE
            WHEN (
               member_1.member_known_as IS NOT NULL
            )
            THEN CONCAT(
               member_1.member_fn_1,
               ' (',
               member_1.member_known_as,
               ')'
            )
            ELSE member_1.member_fn_1
         END
      ) AS member_fn,
      member_1.member_sn AS member_sn,
      member.member_id AS joint_member_id,
      IFNULL(member.member_title, '') AS joint_member_title,
      (
         CASE
            WHEN (
               member.member_known_as IS NOT NULL
            )
            THEN CONCAT(
               member.member_fn_1,
               ' (',
               member.member_known_as,
               ')'
            )
            ELSE member.member_fn_1
         END
      ) AS joint_member_fn,
      member.member_sn AS joint_member_sn
   FROM
      (
         (
            joint_member
            JOIN member
               ON (
                  (
                     joint_member.base_member_id = member.member_id
                  )
               )
         )
         JOIN member member_1
            ON (
               (
                  joint_member.partner_member_id = member_1.member_id
               )
            )
      )
   ORDER BY jointmember_sn) $$

DELIMITER;
...