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

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。'propuestas.id_propuesta'中的未知列'where clause'
有人能解释这个问题和/或提出解决办法吗?

最佳答案

您不能将子查询放在case中,但是您的查询可以通过使用exists()函数轻松地进行修改以实现您的意图:

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
不过,使用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 - MySQL子句中的子查询when子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26618735/

10-13 00:58