2012-02-14 99 views
1

我創建與該查詢的圖如下所示:MySQL的錯誤:在1054未知列「where子句」

create view v2 as 
(select * from appearance a 
where exists (
    select p.id from photo p, photographer u, person s 
    where p.takenBy = u.id 
    and u.id = s.id 
    and a.isShownIn = p.id 
    and s.name = 'Fred' 
    ) 
); 

外觀表有兩列「顯示」和「isShownIn」,但當我嘗試插入在視圖中,它給了我錯誤,因爲錯誤代碼:1054.在'where子句'中的未知列'a.isShownIn'

雖然瀏覽了這個我相信我錯了別名,但一切看起來都OK我,誰能指出哪裏可能是錯誤?

謝謝!

+1

a是不是在你的子查詢引用。查詢本身是否運行? – Brian 2012-02-14 20:28:53

+0

你使用的是什麼版本的MySQL? – simchona 2012-02-14 20:28:55

+0

我正在使用MySQL工作臺5.2 CE。 – user640232 2012-02-14 20:46:58

回答

0

您將無法在以此方式創建的視圖中插入。只有某些視圖是可更新的。在你的具體情況下,你應該插入appearance表,因爲你的視圖只是該表中的一個選擇。

對於可更新視圖的限制,請檢查this。你的看法有這樣的問題:「WHERE子句中引用FROM子句中的表的子查詢」

像@ umbrella建議的那樣,你可以使用連接而不是存在,並且這樣你就可以避免內部查詢,並且您可能有可更新的視圖,但我確實認爲沒有必要插入該視圖,因爲只需插入appearance表即可獲得相同的效果。

+0

「外觀表有兩列'顯示'和'isShownIn',但是當我嘗試在視圖中插入時,它給了我錯誤,因爲錯誤代碼:1054.未知列'where子句'中的'a.isShownIn'」..他說:「但是當我試圖插入視圖」 – 2012-02-14 20:37:46

+0

哇,我真的錯過了什麼! – Umbrella 2012-02-14 20:41:05

+0

感謝您的快速回復。插入外觀表不會更新視圖,對吧?那麼應該怎麼做呢? – user640232 2012-02-14 20:49:49

1

你爲什麼用exists()?爲什麼不加入他們...

create view v2 as 
select a.* 
from appearance a, photo p, photographer u, person s 
where a.isShownIn = p.id 
    and p.takenBy = u.id 
    and u.id = s.id 
    and s.name = 'Fred' 
+0

謝謝,這工作! – user640232 2012-02-14 20:54:44

相關問題