以下查询在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/