2014-10-28 60 views
2

下面的查询工作在Oracle,但在MySQL会产生错误:子查询在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    

错误消息:

Error Code: 1054. Unknown column 'propuestas.id_propuesta' in 'where clause'

任何人都可以解释这个问题和/或建议一个办法?

+0

您可以添加DB设置的屏幕截图? – gudthing 2014-10-28 21:25:16

+0

比上传截图更容易:你可以发布表格的结构吗?使用'show create table propuestas;'和'show create table votospropuestos;' – Barranka 2014-10-28 21:34:51

+0

只是猜测:你想输入'propuestas.id_propuestas'而不是'propuestas.id_propuesta'吗? – afenster 2014-10-28 21:38:04

回答

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 
1

根据SQL ANSI 1999,这是标准中CASE WHEN语句的第一次出现,您不能对它使用子查询。