mysql case when 子句中的子查询 [英] subquery in mysql case when clause

查看:290
本文介绍了mysql case when 子句中的子查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下查询在 oracle 中有效,但在 mysql 中产生错误:

The following query works in oracle, but in mysql it produces an error:

SELECT id_propuestas, titulo, descripcion, id_usuario, votos,
case 
    when(select true 
        from votospropuestos
        where id_propuesta = propuestas.id_propuesta
        and id_usuario = 1) then true 
    else false 
end as votada 
FROM propuestas            

错误信息:

错误代码:1054.'where子句'

谁能解释这个问题和/或提出解决方案?

Can anyone explain the problem and/or suggest a solution?

推荐答案

您不能将子查询放在 case 中,但是您的查询可以通过使用 exists() 函数:

You can't put a subquery inside a case, but your query can easily be reworked to achieve your intention by using the exists() function:

SELECT id_propuestas, titulo, descripcion, id_usuario, votos,
exists(select *
     from votospropuestos 
     where id_propuesta = propuestas.id_propuesta
     and id_usuario = 1) as votada 
FROM propuestas            

如果子查询返回任何行,exists() 函数返回 true,否则返回 false.

The exists() function returns true if any rows are returned from the subquery, false otherwise.

但是使用连接会更有效率:

It would be far more efficient however to use a join:

SELECT p.id_propuestas, p.titulo, p.descripcion, p.id_usuario, p.votos,
    max(v.id_propuesta) IS NOT NULL as votada
FROM propuestas p
LEFT JOIN votospropuestos v
    ON v.id_propuesta = p.id_propuesta
    AND v.id_usuario = 1
GROUP BY 1, 2, 3, 4, 5

这篇关于mysql case when 子句中的子查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆