mysql case when 子句中的子查询 [英] subquery in mysql case when clause
本文介绍了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屋!
查看全文