Неизвестный столбец в «имеющем предложение» в MySQL 5.5 - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь выполнить запрос с:

        SELECT 
            `doctors`.*,
            (
                SELECT GROUP_CONCAT(`areas`.`areaName` SEPARATOR ', ')
                FROM `areas_has_doctors`
                INNER JOIN `areas` ON `areas`.`areaId` = `areas_has_doctors`.`areaId`
                WHERE `areas_has_doctors`.`doctorId` = `doctors`.`doctorId`
            ) as `areas`,
            (
                SELECT GROUP_CONCAT(`areas`.`areaId`)
                FROM `areas_has_doctors`
                INNER JOIN `areas` ON `areas`.`areaId` = `areas_has_doctors`.`areaId`
                WHERE `areas_has_doctors`.`doctorId` = `doctors`.`doctorId`
            ) as `areasIdies`
        FROM 
            `cats_has_doctors`
            INNER JOIN `doctors` ON `doctors`.`doctorId` = `cats_has_doctors`.`doctorId` 
        WHERE 
            `cats_has_doctors`.`catId` = '1' && `doctors`.`disable` = 0
        GROUP BY 
            `cats_has_doctors`.`relationId`
         HAVING FIND_IN_SET('1,2,3,4', `areasIdies`)

Сервер с 10.0.21-MariaDB - MariaDB Сервер работает, но на сервере с:

5.5.61-cll - MySQL Community Server (GPL)

Я получил ошибку:

Unknown column 'areasIdies' in 'having clause'

что я могу сделать?

1 Ответ

0 голосов
/ 05 декабря 2018

Может быть, он думает, что areaIdies - это переменная?

Я бы попробовал вытащить подзапрос AreaIdies во временную таблицу и попробовать это.Просто оставьте запрос таким, как он есть, чтобы проверить, но просто сделайте это сверху и измените find в set param.

CREATE TEMPORARY TABLE IF NOT EXISTS areasIdiesTemp AS (
    SELECT GROUP_CONCAT(`areas`.`areaId`)
    FROM `areas_has_doctors`
    INNER JOIN `areas` 
    ON `areas`.`areaId` = `areas_has_doctors`.`areaId`
    WHERE `areas_has_doctors`.`doctorId` = `doctors`.`doctorId`
);

SELECT 
    `doctors`.*,
    (
        SELECT GROUP_CONCAT(`areas`.`areaName` SEPARATOR ', ')
        FROM `areas_has_doctors`
        INNER JOIN `areas` ON `areas`.`areaId` = `areas_has_doctors`.`areaId`
        WHERE `areas_has_doctors`.`doctorId` = `doctors`.`doctorId`
    ) as `areas`,
    (
        SELECT GROUP_CONCAT(`areas`.`areaId`)
        FROM `areas_has_doctors`
        INNER JOIN `areas` ON `areas`.`areaId` = `areas_has_doctors`.`areaId`
        WHERE `areas_has_doctors`.`doctorId` = `doctors`.`doctorId`
    ) as `areasIdies`
FROM 
    `cats_has_doctors`
    INNER JOIN `doctors` ON `doctors`.`doctorId` = `cats_has_doctors`.`doctorId` 
WHERE 
    `cats_has_doctors`.`catId` = '1' && `doctors`.`disable` = 0
GROUP BY 
    `cats_has_doctors`.`relationId`
HAVING FIND_IN_SET('1,2,3,4', `areasIdiesTemp`);
...