2014-10-28 61 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語句的第一次出現,您不能對它使用子查詢。