UNION查询的Mysql错误

时间:2015-11-26 06:22:22

标签: mysql sql join count union

select t1.tema,
    count(p.id_pregunta) as num_preguntas
from preguntas p
right join subtema s on p.id_subtema = s.id_subtema
join tema t on t.id_tema = s.id_tema
union
select t1.tema,
    count(r1.id_respuesta) as preg_respuesta
from respuestas r1
right join preguntas p1 on r1.id_pregunta = p1.id_pregunta
right join subtema s1 on p1.id_subtema = s1.id_subtema
right join tema t1 on t1.id_tema = s1.id_tema
group by t1.tema
order by preg_respuesta desc

此查询有什么问题?我得到了这个:

  

错误#1054 - 未知栏' preg_respuesta'在'订单条款''

请帮帮我。

3 个答案:

答案 0 :(得分:3)

SELECT ... UNION从第一个查询中获取其列名。尝试

... ORDER BY num_preguntas DESC

.... ORDER BY 2 DESC

(因为您要按结果中的 2 nd列进行排序。)

答案 1 :(得分:1)

我认为 count 列的别名问题。在第一个查询中,您在第二个num_preguntas中将其命名为preg_respuesta,结果很好,此列的名称来自第一个查询num_preguntas

orger by preg_respuesta desc更改为orger by num_preguntas desc

答案 2 :(得分:0)

这是别名问题...将表别名放在preg_respuesta列所属的位置。

Ex: IF respuestas列属于具有别名r1的表order byorder by r1.preg_respuesta desc 看起来像是:

from a in ctx.ItemReceipts
join b in ctx.ItemReceiptStatusTypes on a.Status equals b.ItemReceiptStatusTypeID
into leftJoinItemReceipts 
from d in leftJoinItemReceipts.DefaultIfEmpty()
join c in ctx.PurchaseOrders on d.ReferenceID equals c.PurchaseOrderID