0

MySQL5.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とはかなり異なります。

4

2 に答える 2

4

構文JOINが間違っており、同じ名前の列が2つあります。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;
于 2013-01-09T14:41:01.080 に答える
2

これを試してみてください...申し訳ありませんが私のコメント、私はあなたがどのようにやっているかに気づきましたLEFT JOIN。結合構文を配置する方法が間違っています...

....

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

OPのコメントに従って編集:

選択クエリでは、これらを選択しています...両方とも同じです...したがって、推論を再修正するには、エイリアスを1つに追加する必要があります。

    l.id,
    pc.id as pcid,

編集:

  • SQLFIDDLEデモ:同じ名前/重複した名前を持つ2つの列のうちの1つの列にエイリアスを提供するだけで十分です...
于 2013-01-09T14:30:43.863 に答える