以下查询在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'
任何人都可以解释问题和/或提出解决方案吗?
答案 0 :(得分:1)
根据SQL ANSI 1999,这是标准中CASE WHEN
语句的首次出现,您无法使用子查询。
答案 1 :(得分:0)
您不能将子查询放在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
。
使用连接会更有效率:
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