简体   繁体   English

使用 where 子句查询 mysql 的别名

[英]using alias to where clause query mysql

i have query我有疑问

SELECT p.name,
    (SELECT GROUP_CONCAT(DISTINCT CONCAT('', f.name) SEPARATOR ' , ') FROM edu_detail_facility df
        INNER JOIN edu_facility f ON df.id_edu_facility = f.id
        WHERE df.id_edu_provider = p.id) as Fasilitas,
    (SELECT GROUP_CONCAT(DISTINCT CONCAT('', a.name) SEPARATOR ' , ') FROM edu_detail_activity da
         INNER JOIN edu_activity a on da.id_edu_activity = a.id
         WHERE da.id_edu_provider = p.id) as Aktifitas
FROM eduprovider p
INNER JOIN edu_lot el ON p.id_school_lot = el.id
INNER JOIN edu_type_of_school et ON p.id_school_tos = et.id
INNER JOIN edu_curriculum ec ON p.id_curriculum = ec.id
INNER JOIN city c ON p.city = c.id
INNER JOIN province pr ON pr.id = p.province
WHERE p.id_school_lot = '6'
AND p.id_school_tos = '4'
AND p.id_curriculum = '5'
AND p.city = '151'
AND p.province = '6'
AND Aktifitas IN (1,2,3,4,5,6,7,8)
AND Fasilitas IN (1,2,3,4,5)
GROUP BY p.id

but mysql showing this error:但 mysql 显示此错误:

Unknown column 'Aktifitas' in 'where clause'

why mysql Alias cant be use in Where clause, but is there something I missing?为什么 mysql 别名不能在 Where 子句中使用,但是我缺少什么吗?

Thanks in advance.提前致谢。

You can't use column's alias in where clause you must repeat the code您不能在 where 子句中使用列的别名,您必须重复代码

(because the where clause is executed before of the select clause and for this reason the alias name is not know by the where clause ) (因为 where 子句在 select 子句之前执行,因此 where 子句不知道别名)

    SELECT p.name,
        (SELECT GROUP_CONCAT(DISTINCT CONCAT('', f.name) SEPARATOR ' , ')
         FROM edu_detail_facility df
         INNER JOIN edu_facility f ON df.id_edu_facility = f.id
         WHERE df.id_edu_provider = p.id) as Fasilitas,
        (SELECT GROUP_CONCAT(DISTINCT CONCAT('', a.name) SEPARATOR ' , ') 
          FROM edu_detail_activity da
             INNER JOIN edu_activity a on da.id_edu_activity = a.id
             WHERE da.id_edu_provider = p.id) as Aktifitas
    FROM eduprovider p
    INNER JOIN edu_lot el ON p.id_school_lot = el.id
    INNER JOIN edu_type_of_school et ON p.id_school_tos = et.id
    INNER JOIN edu_curriculum ec ON p.id_curriculum = ec.id
    INNER JOIN city c ON p.city = c.id
    INNER JOIN province pr ON pr.id = p.province
    WHERE p.id_school_lot = '6'
    AND p.id_school_tos = '4'
    AND p.id_curriculum = '5'
    AND p.city = '151'
    AND p.province = '6'
    AND (SELECT GROUP_CONCAT(DISTINCT CONCAT('', a.name) SEPARATOR ' , ') 
          FROM edu_detail_activity da
             INNER JOIN edu_activity a on da.id_edu_activity = a.id
             WHERE da.id_edu_provider = p.id) IN (1,2,3,4,5,6,7,8)
    AND (SELECT GROUP_CONCAT(DISTINCT CONCAT('', f.name) SEPARATOR ' , ')
         FROM edu_detail_facility df
         INNER JOIN edu_facility f ON df.id_edu_facility = f.id
         WHERE df.id_edu_provider = p.id) IN (1,2,3,4,5)
    GROUP BY p.id

eventually you can filter the result using having最终你可以使用有过滤结果

    SELECT p.name,
        (SELECT GROUP_CONCAT(DISTINCT CONCAT('', f.name) SEPARATOR ' , ')
         FROM edu_detail_facility df
         INNER JOIN edu_facility f ON df.id_edu_facility = f.id
         WHERE df.id_edu_provider = p.id) as Fasilitas,
        (SELECT GROUP_CONCAT(DISTINCT CONCAT('', a.name) SEPARATOR ' , ') 
          FROM edu_detail_activity da
             INNER JOIN edu_activity a on da.id_edu_activity = a.id
             WHERE da.id_edu_provider = p.id) as Aktifitas
    FROM eduprovider p
    INNER JOIN edu_lot el ON p.id_school_lot = el.id
    INNER JOIN edu_type_of_school et ON p.id_school_tos = et.id
    INNER JOIN edu_curriculum ec ON p.id_curriculum = ec.id
    INNER JOIN city c ON p.city = c.id
    INNER JOIN province pr ON pr.id = p.province
    WHERE p.id_school_lot = '6'
    AND p.id_school_tos = '4'
    AND p.id_curriculum = '5'
    AND p.city = '151'
    AND p.province = '6'
    HAVING Aktifitas IN (1,2,3,4,5,6,7,8)
    AND   Fasilitas IN (1,2,3,4,5)
    GROUP BY p.id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM