为什么我在 MySQL 中遇到 CTE 的未知列问题

Why I get Unknown column problem with CTE in MySQL

我收到 select 查询的下一个错误。如果我去掉更新子句,错误就会消失:

Error Code: 1054. Unknown column 'CTE.id' in 'where clause'

// SQL

with CTE  as (
       select T1.id,T1.pvalor_recebido
        FROM (
        select  A.id,sum(B.valor_recebido) as pvalor_recebido
            from cl_tiss_sadt A
            join cl_tiss_sadt_proced  B on B.id_tiss_sadt=A.id
            where  A.isguiapadrao is null and A.deleted<>1 
            and A.cab_nrguiaprest='1020001442' and A.lote_id=176
            group by A.id
        union  all
            select  A.id,sum(C.valor_recebido) as pvalor_recebido
            from cl_tiss_sadt A
            join cl_tiss_sadt_odesp C on C.id_tiss_sadt=A.id
            where  A.isguiapadrao is null and A.deleted<>1
            and A.cab_nrguiaprest='1020001442' and A.lote_id=176
            group by A.id ) T1 )
update cl_tiss_sadt BB set BB.valor_recebido=CTE.pvalor_recebido where BB.id=CTE.id

如果我使用下一个,我不会出错,结果是:

id       pvalor_recebido
4200     null

//查询无误

with CTE  as (select T1.id,T1.pvalor_recebido
        FROM (
        select  A.id,sum(B.valor_recebido) as pvalor_recebido
            from cl_tiss_sadt A
            join cl_tiss_sadt_proced  B on B.id_tiss_sadt=A.id
            where  A.isguiapadrao is null and A.deleted<>1 
            and A.cab_nrguiaprest='1020001442' and A.lote_id=176
            group by A.id
        union  all
            select  A.id,sum(C.valor_recebido) as pvalor_recebido
            from cl_tiss_sadt A
            join cl_tiss_sadt_odesp C on C.id_tiss_sadt=A.id
            where  A.isguiapadrao is null and A.deleted<>1
            and A.cab_nrguiaprest='1020001442' and A.lote_id=176
            group by A.id) T1
)
select * from CTE where CTE.id>0

您的更新语法不正确:

with CTE as (
    select id, pvalor_recebido
    <cte sql not relevant>
)
update cl_tiss_sadt, cte
set cl_tiss_sadt.valor_recebido = CTE.pvalor_recebido
where cl_tiss_sadt.id = CTE.id

live demo