Сложный запрос MySQL - сумма нескольких баз данных с использованием UNION ALL и внутренних соединений - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу вычислить сумму по нескольким базам данных, используя UNION ALL и внутренние соединения.Пользователь MySQL имеет разрешения на доступ ко всем соответствующим базам данных.

Вот мой код запроса SQL:

SELECT
    SUM(summen.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
    SUM(summen.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
    SUM(summen.OP1OPVerfahren = "2") AS "Gastric Banding",
    SUM(summen.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
    SUM(summen.OP1OPVerfahren LIKE "%") AS "Summe"

FROM
(
    SELECT
        SUM(op.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
        SUM(op.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
        SUM(op.OP1OPVerfahren = "2") AS "Gastric Banding",
        SUM(op.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
        SUM(op.OP1OPVerfahren LIKE "%") AS "Summe"
        FROM ods01.dat_patient p
        LEFT OUTER JOIN ods01.dat_optherapie op ON op.PatID = p.ID
        WHERE Testzwecke = 0
        AND p.ID = op.PatID  -- possibly redundant
        AND NOT EXISTS (SELECT 1
                        FROM ods01.dat_optherapie op2
                        WHERE op2.PatID = p.ID AND op2.revision > op.revision)
        GROUP BY OP1OPVerfahren

    UNION ALL

    SELECT
        SUM(op.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
        SUM(op.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
        SUM(op.OP1OPVerfahren = "2") AS "Gastric Banding",
        SUM(op.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
        SUM(op.OP1OPVerfahren LIKE "%") AS "Summe"
        FROM ods02.dat_patient p
        LEFT OUTER JOIN ods02.dat_optherapie op ON op.PatID = p.ID
        WHERE Testzwecke = 0
        AND p.ID = op.PatID  -- possibly redundant
        AND NOT EXISTS (SELECT 1
                        FROM ods02.dat_optherapie op2
                        WHERE op2.PatID = p.ID AND op2.revision > op.revision)
        GROUP BY OP1OPVerfahren
) summen

GROUP BY OP1OPVerfahren

Что бы я ни делал в первых 5 строках - оставьте "сумма".", оставьте" Саммен ".или поменяйте его на "оп".- Я получаю сообщение об ошибке:

Ошибка SQL (1054): неизвестный столбец 'summen.OP1OPVerfahren' в 'списке полей'

... или ...

Ошибка SQL (1054): неизвестный столбец 'OP1OPVerfahren' в 'списке полей'

... или ...

Ошибка SQL (1054): неизвестный столбец 'op.OP1OPVerfahren' в 'списке полей'

Где моя логическая ошибка?

Здесь я видел все другие ссылки на это, ноне нашел ни одной темы, касающейся интеграции таблиц JOINed (что не должно быть проблемой).

Кто-нибудь понял, что мне нужно изменить?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы уже присвоили псевдоним, чтобы вы могли ссылаться на имя внутреннего столбца

SELECT
  SUM(summen.`Keine Operation durchgeführt`),
  SUM(summen.`Bioenterics Intragastric Ballon (BIB)`),
  SUM(summen.`Gastric Banding`),
  SUM(summen.`Roux-en-Y Gastric Bypass`),
  SUM(summen.`Summe`)

FROM
(
  SELECT
      SUM(op.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
      SUM(op.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
      SUM(op.OP1OPVerfahren = "2") AS "Gastric Banding",
      SUM(op.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
      SUM(op.OP1OPVerfahren LIKE "%") AS "Summe"
      FROM ods01.dat_patient p
      LEFT OUTER JOIN ods01.dat_optherapie op ON op.PatID = p.ID
      WHERE Testzwecke = 0
      AND p.ID = op.PatID  -- possibly redundant
      AND NOT EXISTS (SELECT 1
                      FROM ods01.dat_optherapie op2
                      WHERE op2.PatID = p.ID AND op2.revision > op.revision)
      GROUP BY OP1OPVerfahren

  UNION ALL

  SELECT
      SUM(op.OP1OPVerfahren = "0"),
      SUM(op.OP1OPVerfahren = "1"),
      SUM(op.OP1OPVerfahren = "2"),
      SUM(op.OP1OPVerfahren = "3"),
      SUM(op.OP1OPVerfahren LIKE "%")
      FROM ods02.dat_patient p
      LEFT OUTER JOIN ods02.dat_optherapie op ON op.PatID = p.ID
      WHERE Testzwecke = 0
      AND p.ID = op.PatID  -- possibly redundant
      AND NOT EXISTS (SELECT 1
                      FROM ods02.dat_optherapie op2
                      WHERE op2.PatID = p.ID AND op2.revision > op.revision)
      GROUP BY OP1OPVerfahren
  ) summen
0 голосов
/ 26 февраля 2019

Вам необходимо добавить OP1OPVerfahren в список выбора для обоих внутренних запросов-

SELECT
    SUM(OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
    SUM(OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
    SUM(OP1OPVerfahren = "2") AS "Gastric Banding",
    SUM(OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
    SUM(OP1OPVerfahren LIKE "%") AS "Summe"

FROM
(
    SELECT OP1OPVerfahren,
        SUM(op.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
        SUM(op.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
        SUM(op.OP1OPVerfahren = "2") AS "Gastric Banding",
        SUM(op.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
        SUM(op.OP1OPVerfahren LIKE "%") AS "Summe"
        FROM ods01.dat_patient p
        LEFT OUTER JOIN ods01.dat_optherapie op ON op.PatID = p.ID
        WHERE Testzwecke = 0
        AND p.ID = op.PatID  -- possibly redundant
        AND NOT EXISTS (SELECT 1
                        FROM ods01.dat_optherapie op2
                        WHERE op2.PatID = p.ID AND op2.revision > op.revision)
        GROUP BY OP1OPVerfahren

    UNION ALL

    SELECT OP1OPVerfahren,
        SUM(op.OP1OPVerfahren = "0") AS "Keine Operation durchgeführt",
        SUM(op.OP1OPVerfahren = "1") AS "Bioenterics Intragastric Ballon (BIB)",
        SUM(op.OP1OPVerfahren = "2") AS "Gastric Banding",
        SUM(op.OP1OPVerfahren = "3") AS "Roux-en-Y Gastric Bypass",
        SUM(op.OP1OPVerfahren LIKE "%") AS "Summe"
        FROM ods02.dat_patient p
        LEFT OUTER JOIN ods02.dat_optherapie op ON op.PatID = p.ID
        WHERE Testzwecke = 0
        AND p.ID = op.PatID  -- possibly redundant
        AND NOT EXISTS (SELECT 1
                        FROM ods02.dat_optherapie op2
                        WHERE op2.PatID = p.ID AND op2.revision > op.revision)
        GROUP BY OP1OPVerfahren
) summen
GROUP BY OP1OPVerfahren
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...