2013-01-09 80 views
0

我在MySQL 5.5中寫了一個視圖。我的代碼是下面的一個:視圖+左連接在MySQL 5中返回錯誤1054

DROP VIEW IF EXISTS vw_lancamentos; 
    CREATE VIEW vw_lancamentos AS 
    SELECT 
    l.id, 
    l.data_hora_lancamento, 
    l.valor, 
    l.descricao, 
    l.veiculo_id, 
    l.plano_conta_id, 
    pc.id, 
    pc.master_id, 
    pc.descricao, 
    pc.tipo_movimento 
    FROM 
    lancamentos l, plano_de_contas pc 
    LEFT JOIN 
    plano_de_contas on (l.plano_conta_id = pc.id); 

當我嘗試編譯上面這段代碼,服務器返回此錯誤: 錯誤代碼:1054未知列在「l.plano_conta_id「的條款」

我該如何使它工作?我之前和Firebird一起工作過,正如我看到的,它與MySQL完全不同。

+0

哇。我不明白你說了什麼。對不起._。 – juniorgarcia

+0

該查詢語法在Firebird中也不會有效。 –

+0

當然這不適用於Firebird。 – jachguate

回答

4

JOIN語法錯誤,並且您有兩個具有相同名稱的列。如果你想同時返回l.idpc.id那麼你會想給一個別名都區分他們這些字段:

CREATE VIEW vw_lancamentos AS 
    SELECT 
    l.id as l_id, -- add alias 
    l.data_hora_lancamento, 
    l.valor, 
    l.descricao, 
    l.veiculo_id, 
    l.plano_conta_id, 
    pc.id as pc_id, -- add alias 
    pc.master_id, 
    pc.descricao, 
    pc.tipo_movimento 
    FROM lancamentos l 
    LEFT JOIN plano_de_contas pc 
    on l.plano_conta_id = pc.id; 
+0

我猜l.id不需要別名...只有一個ON子句... – bonCodigo

+0

你不用兩個都不需要別名,但你最好提供兩個別名,這樣你就知道該記錄來自哪個表。 'plano_conta_id'是一個不同的名字,所以不會和該列混淆。這是兩個名爲'id'的字段是問題。 – Taryn

+0

它仍然顯示錯誤** 1054 **告訴它不知道行pc.id中的列pc_id, - 添加別名 – juniorgarcia

2

請試試這個...對不起igonore我的評論,我只是注意到你是如何在做LEFT JOIN。的方式安排聯接語法是錯誤的...

.... 

FROM lancamentos l 
LEFT JOIN 
plano_de_contas pc on (l.plano_conta_id = pc.id); 

編輯按OP的評論:

在您選擇查詢

您選擇thtese ......都一樣......所以recorrect推理,您需要爲其中一個添加別名。

l.id, 
    pc.id as pcid, 

編輯:

  • SQLFIDDLE DEMO:這是足以提供別名一列的是具有相同的名稱/姓名重複的兩個...
+0

嗨!現在服務器向我顯示這個:**錯誤代碼:1060.重複的列名'id'** – juniorgarcia