我在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有很大的不同。
您的JOIN
语法是错误的,您有两个具有相同名称的列。如果您想同时返回l.id
和pc.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;
请试试这个…抱歉忽略我的评论,我只是注意到你是如何做LEFT JOIN
的。安排连接语法的方式是错误的…
....
FROM lancamentos l
LEFT JOIN
plano_de_contas pc on (l.plano_conta_id = pc.id);
按OP的注释编辑:
在你的select查询中,你选择了这些…两者都一样……因此,为了纠正推理,您需要为1添加别名。
l.id,
pc.id as pcid,
编辑:- SQLFIDDLE DEMO:为两个具有相同名称/重复名称的列中的一个提供别名就足够了…