【问题标题】:View + Left Join returning error 1054 in MySQL 5在 MySQL 5 中查看 + 左连接返回错误 1054
【发布时间】:2013-01-09 14:22:59
【问题描述】:

我正在 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 子句”中的未知列“l.plano_conta_id”

我怎样才能让它工作?我之前使用过 Firebird,我发现它与 MySQL 完全不同。

【问题讨论】:

  • 哇。我不明白你告诉我什么。对不起._.
  • 该查询语法在 Firebird 中也不起作用。
  • 当然这不适用于 Firebird。

标签: mysql sql view firebird


【解决方案1】:

您的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;

【讨论】:

  • 两者都不需要别名,但最好在两者上都提供一个别名,这样您就知道记录来自哪个表。 plano_conta_id 是一个不同的名称,因此不会与该列混淆。问题在于名为id 的两个字段。
  • 它仍然显示错误 1054 告诉它不知道行中的列 pc.id as pc_id, -- add alias
  • @JuninhoDG 看到我的编辑,现在应该修复了。那是我的错,当我重写它时,我错过了桌子上的pc 别名。
  • @bluefeet,我刚刚为字段 descricao 添加了别名,效果很好。感谢您的帮助!
  • 好吧,根据sqlfiddle,将别名赋予一个 id 就足够了,因为 OP 没有提到任何一个 ID 字段都包含哪种数据类型。所以你的推理并不是真的有必要.. :)
【解决方案2】:

请试试这个...抱歉忽略我的评论,我刚刚注意到您在 LEFT JOIN 上的表现如何。安排join Syntax的方式不对...

....

 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 :为具有相同名称/重复名称的两列中的一列提供别名就足够了......

【讨论】:

  • 嗨,伙计。现在服务器向我显示:错误代码:1060. Duplicate column name 'id'
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2018-10-14
相关资源
最近更新 更多