View + Left Join在MySQL 5中返回错误1054

时间:2013-01-09 14:22:59

标签: mysql sql view firebird

我正在MySQL 5.5中编写视图。我的代码如下:

  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。'on clause'中的未知列'l.plano_conta_id'

我怎样才能让它发挥作用?我之前和Firebird合作过,而且我可以看到它与MySQL完全不同。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

请试试这个...对不起igonore我的评论,我刚刚注意到你是如何做LEFT JOIN的。安排连接语法的方式是错误的......

....

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

根据OP评论编辑:

在您的选择查询中,您正在选择thtese ...两者都相同...因此要重新校正推理,您需要为其中一个添加别名。

    l.id,
    pc.id as pcid,

编辑:

  • SQLFIDDLE DEMO :为两个具有相同名称/重复名称的列中的一个列提供别名就足够了......