2013-01-09 55 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