为什么我在 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
我收到 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